0

onResumeでwifiSSIDがEmptyまたは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

ここで、nullを返すことができる場合(そしてJavadocはそれが可能であることを示しているようです)、メソッドを呼び出す前に、getConnetionInfo()を使用してそれらをチェックする必要があります。==

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

ドキュメントには次のように書かれています。

現在接続されているネットワークがない場合、SSIDはnullになる可能性があります。

.equals()nullを呼び出すことができないことを意味します。また、nullのチェックはequals("null")、ではなく、を使用して行う必要がありますgetSSID() == null

于 2012-04-30T13:32:10.337 に答える