0

尝试在 onResume 中测试 wifi SSID isEmpty 或 equals("null") 时,我得到了一个 NPE。这是我设置它的方式:

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)。所以不知道为什么会被抛出。任何帮助将非常感激!

4

2 回答 2

2

您对 null 的检查是错误的;你必须使用==. 你不能调用equals()一个不存在的对象,或者你得到一个异常。你需要这样做:

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

现在,如果getConnetionInfo()可以返回 null (并且 Javadoc 似乎表明它可以),那么您需要==在调用它们的任何方法之前检查那些 using ,例如

if (myWifiManager != null && myWifiManager.isWifiEnabled() &&
    myWifiManager.getConnectionInfo().getSSID() != null) ...
于 2012-04-30T13:30:37.157 回答
0

文档说:

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

意味着你不能调用.equals()null。同样检查 null 不应该由.equals("null")而不是getSSID() == null.

于 2012-04-30T13:32:10.337 回答