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(); } }); } } 

  • 尝试调用空对象引用的虚拟方法'int android.text.Layout.getLineCount()'
  • findFragmentById返回null
  • Android上的findViewById()上的NullPointerException
  • 关闭网络后,AdWhirl导致java.lang.NullPointerException
  • Android在动态壁纸中播放电影文件
  • DialogFragment:NullPointerException(支持库)
  • 编舞NullPointerException
  • runOnUiThread(new Runnable(){
  • 调用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();