1

我正在开发一个应用程序,并从列表视图中创建一个包含所选项目和上一个项目的包。我需要确定的是前一个项目是否真的被捆绑在一起。如果它存在,我想要信息,但如果它不存在,那么我需要设置我的文本视图来反映这一点。但是如果在尝试加载接收活动时它不存在,我会得到一个空指针异常(捆绑活动不会导致崩溃,正如我在调试期间发现的那样 - 我到了我正在测试数据的地步在它崩溃之前捆绑)。所以我已经包含了接收活动的代码。

    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 为空(查看调试器中的变量),所以我认为这样的事情可能会起作用:

     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");
    }

但我得到一个 NullPointerException 因为 prvEvm 是空的。所以我尝试翻转 if 测试,但得到了相同的结果。我应该注意,无论我如何设置它,如果 prvEvm 不为空,这里的所有配置都有效 - 请求的数据放在 TextView 中。基本上,我需要能够绕过这个空指针异常。我知道该对象为空,我想对其进行测试,如果是,则不使用该对象。它只会为空一次。

4

1 回答 1

3

不要equals(null)在空对象上调用方法(等于)时使用。相反,与 null 比较:

if (prvEvm != null){

此外,equals(null)总是返回 false。

于 2012-04-08T12:52:34.463 回答