我有一个活动,它显示了一些列表条目。当我点击一个列表项时,我的应用程序通过NetworkInfo.getTypeName()检查哪种连接类型是可用的("WIF“或"MOBILE")。只要我调用这个方法,我就会得到一个NullpointerException。为什么?
我在模拟器上测试了这个,因为我的手机目前不可用(它坏了...)。我想这就是问题所在吧?这是我唯一的解释,如果不是这样,我不知道为什么这会是空的。
下面是一些代码片段:
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();
}
});
}
}发布于 2010-03-15 03:12:16
如果没有活动的网络,则调用getActiveNetworkInfo()可以返回null,您需要对此进行检查。这是来自here的源代码。
/**
* Return NetworkInfo for the active (i.e., 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:"return the info for the active network,or null if Note active“。
发布于 2010-03-15 03:34:55
我知道您有连接,并且模拟器能够使用它,但是对getActiveNetworkInfo()的调用无论如何都会返回null,这就是您感到困惑的原因。
您的怀疑是对的: getActiveNetworkInfo()在仿真器上不起作用,总是返回null。
发布于 2010-05-14 04:43:07
我发现如果在模拟器中按F8打开3G,cm.getActiveNetworkInfo()就会返回一个非空的可用NetworkInfo句柄。
https://stackoverflow.com/questions/2443364
复制相似问题