1

アプリケーションに取り組んでおり、リストビューから、選択したアイテムと前のアイテムを含むバンドルを作成します。私が判断する必要があるのは、前のアイテムが実際にバンドルされているかどうかです。存在する場合はその情報が必要ですが、存在しない場合はそれを反映するようにテキストビューを設定する必要があります。ただし、受信アクティビティを読み込もうとしたときにnullポインター例外が存在しない場合は、nullポインター例外が発生します(デバッグ中に検出したように、バンドルアクティビティによってクラッシュが発生することはありません。クラッシュする前にバンドルします)。そこで、受信アクティビティからのコードを含めました。

    Bundle evmBundle = this.getIntent().getExtras();
    final EVMData evm = (EVMData) evmBundle.getSerializable("evm");

    final Project project = (Project) evmBundle.getSerializable("project");

            if (!evmBundle.getSerializable("prvEVM").equals(null)){
        final EVMData prvEvm = (EVMData) evmBundle.getSerializable("prvEVM");
        edtPrvAC = (TextView) findViewById(R.id.edtPrvEVMAC);
        edtPrvAC.setText(prvEvm.getAc().toString());
    }
    else{
        edtPrvAC = (TextView) findViewById(R.id.edtPrvEVMAC);
        edtPrvAC.setText("0");
    }

「prvEVM」はデバッガーのバンドルの一部として表示されたため、バンドル内で何かが渡されていることを知っています。

また、最初にバンドルから取り出してから、比較してみました。バンドルからプルした後、prvEvmはnull(デバッガーで変数を見る)なので、次のようなものが機能する可能性があると思いました。

     if (!prvEvm.equals(null)){
        edtPrvAC = (TextView) findViewById(R.id.edtPrvEVMAC);
        edtPrvAC.setText(prvEvm.getAc().toString());
    }else{
        edtPrvAC = (TextView) findViewById(R.id.edtPrvEVMAC);
        edtPrvAC.setText("0");
    }

しかし、prvEvmがNullであるため、NullPointerExceptionが発生します。そこで、ifテストを反転させてみましたが、同じ結果が得られました。これをどのように設定しても、prvEvmがnullでない場合、ここでのすべての構成が機能することに注意してください。要求されたデータはTextViewに配置されます。基本的に、このnullポインター例外を回避できる必要があります。オブジェクトがnullであることがわかっているので、nullである場合は、そのオブジェクトが使用されないようにテストしたいと思います。nullになるのは1回だけです。

4

1 に答える 1

3

equals(null)nullオブジェクトでメソッド(equals)を呼び出すときに使用しないでください。代わりに、nullと比較してください。

if (prvEvm != null){

その上、equals(null)常にfalseを返します。

于 2012-04-08T12:52:34.463 に答える