2013-02-19 107 views
1

我收到一個NullPointerException,代碼如下。有誰知道可能是什麼原因造成的?我想檢查網絡狀態,但它給我nullPointerException爲什麼?

public void clickMe(View v) //the view is button 
    { 

     ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = conMgr.getActiveNetworkInfo(); 

     String b; 

     if(networkInfo.isConnected()) 
      b="on"; 
     else 
      b="off"; 

     Toast.makeText(MainActivity.this, b , Toast.LENGTH_SHORT).show(); 
    } 
+2

在什麼行是拋出的NullPointerException?請發佈堆棧跟蹤。 – rgettman 2013-02-19 17:43:15

+2

後。疊加。跟蹤。 – njzk2 2013-02-19 17:47:15

+0

at(if(networkInfo.isConnected())) – 2013-02-19 17:51:22

回答

2

根據getActiveNetworkInfo()的文檔:

有關當前活動數據網絡返回的詳細信息。連接時,此網絡是傳出連接的默認路由。在啓動網絡通信之前,您應始終檢查isConnected()。當沒有網絡可用時,這可能會返回null

所以你沒有任何活動的網絡,檢查它是否null像這樣:

if(networkInfo != null && networkInfo.isConnected()) 
2

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

這種方法看一看要求調用持有許可ACCESS_NETWORK_STATE。

如果沒有,您需要將此權限添加到您的應用程序。如果你不這樣做,你可能會得不到結果,並且意外地得到一個空結果。

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

確保將它添加到清單中。

+0

這會拋出一個NullPointerException嗎? – Sam 2013-02-19 17:49:40

+0

是的,會的。你需要擁有它。我從文檔中添加了一個鏈接和一個聲明。 – Kirk 2013-02-19 17:51:42

+0

你確定嗎?這與NPE無關,這將引發SecurityException ... – Sam 2013-02-19 17:58:08