在尝试测试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)。所以不确定为什么会被抛出。任何帮助将不胜感激!
答案 0 :(得分:2)
您检查null是错误的;你必须使用==
。您不能在不存在的对象上调用equals()
,否则会出现异常。你需要这样做:
myWifiManager.getConnectionInfo().getSSID() == null
现在,如果getConnetionInfo()
可以返回null(并且Javadoc似乎表明它可以),那么你需要在调用它们之前使用==
检查它们,或者像
if (myWifiManager != null && myWifiManager.isWifiEnabled() &&
myWifiManager.getConnectionInfo().getSSID() != null) ...
答案 1 :(得分:0)
如果当前没有网络连接,则SSID可能为空。
表示您无法在null上调用.equals()
。同样检查null也不应由equals("null")
进行,而应使用getSSID() == null
。