ConnectivityManager getActiveNetworkInfo空指针异常

van*_*dzi 9 android android-service android-networking

我在连接管理器中偶尔会看到空指针异常.从意图服务我通过isOnWIFI(this)检查网络状态.在cm.getActiveNetworkInfo()行发生异常.这很奇怪,因为我在调用之前检查了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()));

}
Run Code Online (Sandbox Code Playgroud)

有没有想过为什么会这样?我无法调试它,因为它只是偶尔出现错误报告.我看到的唯一解决方案是将其放入try catch块.谢谢.

and*_*dev 6

如果没有活动连接,他们只是返回null我认为这是你的问题.

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


小智 6

android_dev是对的.您的代码中的问题来自cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()));

是! 你cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null之前检查过,但是通过getNetworkInfo()第二次调用,android会再次获取网络信息,但这次它没有遇到第二次返回null的活动网络.问题是,不是因为你getNetworkInfo()之前调用了毫秒并且没有得到空值,这意味着你不会在一毫秒之后得到它


Har*_*tab 3

Try this. Read more here
Run Code Online (Sandbox Code Playgroud)

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

 }  
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案根本没有解决问题。 (2认同)