WifiManager getSSID()抛出NPE ......为什么?

时间:2012-04-30 13:20:52

标签: android nullpointerexception

在尝试测试onResume中wifi SSID是isEmpty还是equals(“null”)时,我得到了一个N​​PE。以下是我如何设置它:

Class MyActivity extends Activity{

    WifiManager myWifiManager;


    public void onCreate(Bundle savedInstanceState) {

        myWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    ...
}

    protected void onResume() {

           if (myWifiManager.isWifiEnabled() && !(myWifiManager.getConnectionInfo().getSSID().equals("null"))) {
...
}

我已经确定它正在抛出NPE的getSSID。令我困惑的是,我没有在我的onCreate(或任何其他方法)中取消WifiManager对象,如果我单独测试myWifiManager.isWifiEnabled,它工作得很好,所以对象仍然存在。我可以记录myWifiManager.getConnectionInfo()。getSSID()并获取null或所述值(取决于是否连接了wifi)。所以不确定为什么会被抛出。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您检查null是错误的;你必须使用==。您不能在不存在的对象上调用equals(),否则会出现异常。你需要这样做:

myWifiManager.getConnectionInfo().getSSID() == null

现在,如果getConnetionInfo()可以返回null(并且Javadoc似乎表明它可以),那么你需要在调用它们之前使用==检查它们,或者像

if (myWifiManager != null && myWifiManager.isWifiEnabled() &&
    myWifiManager.getConnectionInfo().getSSID() != null) ...

答案 1 :(得分:0)

documentation说:

  

如果当前没有网络连接,则SSID可能为空。

表示您无法在null上调用.equals()。同样检查null也不应由equals("null")进行,而应使用getSSID() == null