Android,NetworkInfo.getTypeName(),NullpointerException

我有一个活动,显示一些列表条目。 当我点击一个列表项时,我的应用程序通过NetworkInfo.getTypeName()检查哪个连接types可用(“WIF”或“MOBILE”)。 只要我调用这个方法,我得到一个NullpointerException。 为什么?

我在模拟器上testing了这个,导致我的手机目前不可用(这是坏的…)。 我认为这是问题? 这是我唯一的解释,如果不是这样,我不知道为什么这将是空的。

这是一些代码片段:

public class VideoList extends ListActivity{ ... public void onCreate(Bundle bundle){ final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); ... listview.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ... NetworkInfo ni = cm.getActiveNetworkInfo(); String connex = ni.getTypeName(); //Nullpointer exception here if(connex.equals("WIFI")doSomething(); } }); } } 

Solutions Collecting From Web of "Android,NetworkInfo.getTypeName(),NullpointerException"

调用getActiveNetworkInfo()可以返回null,如果没有活动的networking,你需要检查。 这里是来自这里的源代码。

 /** * Return NetworkInfo for the active (ie, connected) network interface. * It is assumed that at most one network is active at a time. If more * than one is active, it is indeterminate which will be returned. * @return the info for the active network, or {@code null} if none is active */ public NetworkInfo getActiveNetworkInfo() { enforceAccessPermission(); for (NetworkStateTracker t : mNetTrackers) { NetworkInfo info = t.getNetworkInfo(); if (info.isConnected()) { return info; } } return null; } 

特别注意javadoc:“返回活动networking的信息,如果没有活动networking,则返回null”。

我明白,你有连接和模拟器能够使用它,但然后对getActiveNetworkInfo()的调用返回你无论如何,这就是为什么你感到困惑。

那么,你的怀疑是正确的:getActiveNetworkInfo()不能在模拟器上工作,并始终返回null。

我发现如果按F8在模拟器中打开3G,则cm.getActiveNetworkInfo()会返回一个非null的可用NetworkInfo句柄。

代替

 if(connex.equals("WIFI") doSomething(); 

尝试

 if("WIFI".equals(connex)) doSomething();