Intereting Posts
Loader и LoaderManager – как определить, активен ли текущий загрузчик и работает ли он? В чем разница между частными библиотеками Android, зависимостями и папкой libs? Android setBackgroundTintList на предустановленных устройствах Отключить андроид в ожидании подтверждения действия Android: Почему нажатие на уведомление о намерении с backstack уничтожает родительскую MainActivity? Получение предупреждений с помощью Proguard (с внешними библиотеками) InputMethodManager содержит ссылку на tabhost – Memory Leak – OOM Error Как установить значок каждой вкладки в файле фрагментарный фрагмент в анимацию gif? Статистика загрузки фонограмм Android Требуется ли для Android Systrace получить доступ root? Отправка намерения BroadcastReceiver из adb Android – создание списка с плавающими заголовками Пустой просмотр ViewPager с PagerTabStrip Как запустить одно и то же действие в отдельном окне в многоэкранном режиме Android N? LocationManager слишком часто вызывает onLocationChanged?

Android, NetworkInfo.getTypeName (), NullpointerException

У меня есть активность, которая показывает некоторые записи в списке. Когда я нажимаю элемент списка, мое приложение проверяет, какой тип соединения доступен («WIF» или «MOBILE»), через 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(); } }); } } 

Solutions Collecting From Web of "Android, NetworkInfo.getTypeName (), NullpointerException"

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

 /** * Return NetworkInfo for the active (ie, 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, если ни один не активен».

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

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

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

Вместо

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

пытаться

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