Android中,NetworkInfo.getTypeName()导致NullpointerException异常。

10

我有一个Activity用于显示一些列表项。当我点击一个列表项时,我的应用程序通过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();
   }
  });
 }
}
4个回答

10

如果没有活动网络,调用getActiveNetworkInfo()可能会返回null,您需要进行检查。以下是源代码,来自这里

/**
 * 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中的内容:“返回活动网络的信息,如果没有活动网络则返回null”。

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

2

我知道你已经连接网络并且模拟器也可以使用网络,但是调用getActiveNetworkInfo()方法返回的却是null,这让你感到困惑。

其实,你的猜测是正确的:getActiveNetworkInfo()方法在模拟器上不起作用,总是返回null。


-1

不要使用

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

尝试

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

1
请不要使用Yoda条件...我更喜欢if(connex!=null && connext.equals("WIFI"))。 - Necronet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接