0

如标题所示,我无法从NetWorkInfo类获得Broadcastreceiver中的状态。无法从NetWorkInfo获得状态Android

它会在下面给出的日志输出中返回一些错误。

我需要你的帮助。

这里是日志输出和Broacastreceiver类,我还注意到我已经添加了所有权限(访问网络状态和Internet)和广播意图action android:name="android.net.conn.CONNECTIVITY_CHANGE

所以我敢说在manifest.xml文件中没有问题。

ConnectivityManager cm = 
      (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

    State state = activeNetwork.getState(); 

    switch (state) { 

    case CONNECTING: 
     Toast.makeText(context, "connecting", Toast.LENGTH_SHORT).show(); 
    break; 

和日志输出是:

java.lang.RuntimeException: Unable to start receiver com.example.test.ConnectivityChangeReceiver: java.lang.NullPointerException 
E/AndroidRuntime(9873): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2668) 
E/AndroidRuntime(9873): at android.app.ActivityThread.access$1800(ActivityThread.java:172) 
E/AndroidRuntime(9873): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1384) 
E/AndroidRuntime(9873): at android.os.Handler.dispatchMessage(Handler.java:102) 
E/AndroidRuntime(9873): at android.os.Looper.loop(Looper.java:146) 
E/AndroidRuntime(9873): at android.app.ActivityThread.main(ActivityThread.java:5653) 
E/AndroidRuntime(9873): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(9873): at java.lang.reflect.Method.invoke(Method.java:515) 
E/AndroidRuntime(9873): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
E/AndroidRuntime(9873): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
E/AndroidRuntime(9873): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(9873): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(9873): at com.example.test.ConnectivityChangeReceiver.onReceive(ConnectivityChangeReceiver.java:27) 
E/AndroidRuntime(9873): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2653) 
+1

什么是第27行'ConnectivityChangeReceiver.java'? – Raghunandan 2015-02-08 13:10:00

+0

这是我的broadcastreceiver类 – 2015-02-08 13:24:50

回答

1

你在这一行activeNetwork.getState()越来越NPE,这是因为activeNetworknull当没有默认网络时,这可能会返回null。

确定在测试此应用程序时有活动网络。在这种情况下,activeNetwork.getState()应该是非空的。

如果你的目的是测试的Wi-Fi和移动网络连接,那么你可以尝试使用下面的代码:

ConnectivityManager cm = 
       (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     boolean isWifiConn = networkInfo.isConnected(); 
     networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isMobileConn = networkInfo.isConnected(); 


     Log.d("ConnectivityChangeReceiver", "Wifi connected: " + isWifiConn); 
     Log.d("ConnectivityChangeReceiver", "Mobile connected: " + isMobileConn); 

此代码确定这些网络接口是否可用(即是否网络连接是可能的)和/或连接(也就是说,网络连接是否存在以及是否有可能建立套接字并传递数据)

此外,您不应根据网络是否“可用”做出决定。在执行网络操作之前​​检查isConnected(),因为isConnected()处理像fla这样的情况ky移动网络,飞行模式和受限背景数据。

public boolean isOnline() { 
    ConnectivityManager connMgr = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    return (networkInfo != null && networkInfo.isConnected()); 
} 
0

我相信您在清单中缺少以下权限。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

<uses-permission android:name="android.permission.INTERNET"/>