10

我有一个显示一些列表条目的活动。当我单击列表项时,我的应用程序通过 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

4 回答 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”。

于 2010-03-14T19:12:15.730 回答
2

我知道您有连接并且模拟器能够使用它,但是对 getActiveNetworkInfo() 的调用无论如何都会返回 null,这就是您感到困惑的原因。

好吧,您的怀疑是正确的: getActiveNetworkInfo() 在模拟器上不起作用,并且总是返回 null。

于 2010-03-14T19:34:54.657 回答
2

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

于 2010-05-13T20:43:06.533 回答
-1

代替

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

尝试

if("WIFI".equals(connex)) doSomething();
于 2010-07-01T09:19:12.743 回答