2013-02-19 122 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