ConnectivityManager getActiveNetworkInfo空指针exception

连接pipe理器中偶尔会看到空指针exception。 从intent服务,我isOnWIFI(this)检查networking状态。 在cm.getActiveNetworkInfo()行发生exception。 这很奇怪,因为在我调用这个之前我检查了null。 注意:权限已设置。

public static boolean isOnWIFI(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); return cm != null //here occurs NullPointerException && cm.getActiveNetworkInfo() != null && ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo( ConnectivityManager.TYPE_WIFI).isConnected())); } 

任何想法为什么会发生 我无法debugging它,因为它只是偶尔从错误报告。 我只看到解决scheme是把它放到try catch块。 谢谢。

Solutions Collecting From Web of "ConnectivityManager getActiveNetworkInfo空指针exception"

你是否检查了他们提到的API,如果没有活动的连接,他们只是返回null我认为这是我们的问题。

http://developer.android.com/reference/android/net/ConnectivityManager.html #getActiveNetworkInfo()

android_dev是正确的。 代码中的问题来自cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()));

是! 你检查cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null之前,但是通过第二次调用getNetworkInfo() ,android第二次去获取networking信息,只是这次它没有遇到一个活跃的networking返回null这一秒时间。 问题是,不是因为你之前调用了getNetworkInfo()毫秒而没有得到null,这意味着你不会在毫秒后得到它

 Try this. Read more here 

http://developer.android.com/training/basics/network-ops/managing.html

 public static boolean isOnWIFI(Context context) { ConnectivityManager cm = (ConnectivityManager) this.getSystemService(context.CONNECTIVITY_SERVICE); if(cm != null){ NetworkInfo networkInfo = cm.getActiveNetworkInfo(); boolean isWiFi = networkInfo.getType() == ConnectivityManager.TYPE_WIFI; // if user is connected to network if (isWifi) { return true; }else { return false; } } else{ //cm is null return false } } 

当我使用服务时,这解决了我的问题。在我刚刚使用!info.isConnected()之前,但这还不够

  ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if(info==null || !info.isConnected()) { stopSelf(); return; } 

getActiveNetworkInfo返回null如果没有没有默认连接可用按照文档>> getActiveNetworkInfo 。所以我build议你做的是检查networking,每个单独如下

 NetworkInfo WiFiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

然后检查它们是否可用

 if(mobileInfo != null & mobileInfo.isConnectedOrConnecting() || WiFiInfo != null & WiFiInfo.isConnectedOrConnecting()) { //do your task here } else { //show an alert dialog or something } 

我刚刚制作了一个这样的问题模板,现在效果很好。 你可以试试这个代码,我在很多设备上试过,没有问题。 getActiveNetworkInfo()问题 。 在我尝试getAllNetworkInfo()之前,我不明白是什么错,但getAllNetworkInfo()在一些设备上工作愚蠢。