Android, NetworkInfo.getTypEname (), NullPointerException
-
19-09-2019 - |
Вопрос
У меня есть деятельность, которая показывает некоторые записи списка. Когда я нажимаю на элемент списка, мое приложение проверяет, какой тип подключения доступен («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();
}
});
}
}
Решение
Звонок 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, если нет активного».
Другие советы
Я понимаю, что у вас есть подключение, и эмулятор способен использовать его, но затем призыв к GetActivenetWorkInfo () все равно возвращает вас нулевым, и поэтому вы озадачены.
Что ж, ваши подозрения были правильными: GetActivenetWorkInfo () не работает на эмуляторе и всегда возвращает NULL.
Я обнаружил, что если вы нажмете F8, чтобы включить 3G в эмуляторе, cm.getActivenetWorkInfo (), то возвращает не нулевую полезную ручку NetworkInfo.
Вместо
if(connex.equals("WIFI") doSomething();
пытаться
if("WIFI".equals(connex)) doSomething();