2010-03-14 62 views
10

我有一个活动,显示一些列表条目。当我点击一个列表项时,我的应用通过NetworkInfo.getTypeName()检查哪个连接类型可用(“WIF”或“MOBILE”)。一旦我调用这个方法,我得到一个NullpointerException。为什么?Android,NetworkInfo.getTypeName(),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(); 
    } 
    }); 
} 
} 

回答

10

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

2

我知道你有连接,并且模拟器能够使用它,但是然后调用getActiveNetworkInfo()返回null,无论如何,这就是为什么你感到困惑。

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

2

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

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

-1

尝试

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

永远不要做尤达条件,请...我宁可选择 如果(CONNEX!= NULL && connext.equals( “WIFI”) ) – Necronet 2011-10-11 12:50:30

相关问题