Android, NetworkInfo.getTypeName (), NullpointerException

У меня есть действие, которое показывает некоторые записи Списка. Когда я нажимаю на элемент списка мои проверки приложения, какой тип соединения доступен ("WIF" или "МОБИЛЕН"), через NetworkInfo.getTypeName (). Как только я называю этот метод, я получаю NullpointerException. Почему?

Я протестировал это на эмуляторе, причина, мой телефон в настоящее время не доступен (это повредилось...). Я предполагаю, что это - проблема? Это - единственное объяснение, что я имею, если это не так я понятия не имею, почему это было бы пустым.

Вот некоторый фрагмент кода:

public class VideoList extends ListActivity{
 ...
 public void onCreate(Bundle bundle){
  final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  ...
  listview.setOnItemClickListener(new OnItemClickListener(){
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    ...
    NetworkInfo ni = cm.getActiveNetworkInfo();
    String connex = ni.getTypeName(); //Nullpointer exception here
    if(connex.equals("WIFI")doSomething();
   }
  });
 }
}
10
задан user283494 14 March 2010 в 19:07
поделиться

4 ответа

Вызов getActiveNetworkInfo () может вернуть null, если нет активной сети, и вам нужно это проверить. Вот исходный код из здесь .

/**
 * Return NetworkInfo for the active (i.e., connected) network interface.
 * It is assumed that at most one network is active at a time. If more
 * than one is active, it is indeterminate which will be returned.
 * @return the info for the active network, or {@code null} if none is active
 */
public NetworkInfo getActiveNetworkInfo() {
    enforceAccessPermission();
    for (NetworkStateTracker t : mNetTrackers) {
        NetworkInfo info = t.getNetworkInfo();
        if (info.isConnected()) {
            return info;
        }
    }
    return null;
}

Обратите внимание, в частности, на javadoc: «вернуть информацию об активной сети или null, если ни одна не активна».

10
ответ дан 3 December 2019 в 23:49
поделиться

Я понимаю, что у вас есть соединение, и эмулятор способен его использовать, но затем вызов getActiveNetworkInfo() все равно возвращает вам null, и поэтому вы в недоумении.

Что ж, ваши подозрения были верны: getActiveNetworkInfo() не работает на эмуляторе и всегда возвращает null.

2
ответ дан 3 December 2019 в 23:49
поделиться

Я обнаружил, что если вы нажмете F8 для включения 3G в эмуляторе, cm.getActiveNetworkInfo () затем вернет ненулевой пригодный для использования дескриптор NetworkInfo.

2
ответ дан 3 December 2019 в 23:49
поделиться

Вместо

if(connex.equals("WIFI") doSomething();

попробуйте

if("WIFI".equals(connex)) doSomething();
-1
ответ дан 3 December 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: