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"/>