0

Wifi の信号強度を調べようとしていますが、ヌル ポインター例外が発生します。SSIDなどのネットワーク情報を取得しているときに、ヌルポインタ例外を削除する方法を誰かに提案してもらえますか。

enter code here:

public class MyReciever extends BroadcastReceiver{
    WifiManager wifi;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        List<ScanResult> results=wifi.getScanResults();
        ScanResult bestSignal=null;

        for(ScanResult result:results)
        {
            if(bestSignal==null || WifiManager.compareSignalLevel(bestSignal.level, result.level)<0)
                bestSignal=result;
        }

        String message=String.format("%s networks found. %s is the strongest", results.size(),bestSignal.SSID);
        Toast.makeText(context, message, Toast.LENGTH_LONG).show();

        Log.d("Debug","onRecieve() message:" +message);
    }

}



public class MainActivity extends Activity {

    TextView textStatus;
    WifiManager wifi;
    BroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textStatus=(TextView)findViewById(R.id.textStatus);

        wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);

        WifiInfo info=wifi.getConnectionInfo();
        textStatus.append("\n\nWifi Status: " +info.toString());

        List<WifiConfiguration> configs=wifi.getConfiguredNetworks();
        for(WifiConfiguration config:configs)
        {
            textStatus.append("\n\n" +config.toString());
        }

        if(receiver==null)
                receiver = new MyReciever();

        registerReceiver(receiver, new IntentFilter(
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        Log.d("TAG", "onCreate()");
    }

    @Override
    public void onStop() {
        unregisterReceiver(receiver);
            super.onStop();
    }
    }
4

1 に答える 1

1

問題は次の場所にある可能性がありますString message=String.format("%s networks found. %s is the strongest", results.size(),bestSignal.SSID);

bestSignal.SSID「bestSignal」が見つからない場合、変数「bestSignal」は null になり、NPE を引き起こす可能性のある実行を試みています。

コードを次のように変更します if (bestSignal != null) { String message=String.format("%s networks found. %s is the strongest", results.size(),bestSignal.SSID); }

それが役に立てば幸い :)

于 2013-10-21T10:29:23.537 に答える