检查Android中是否存在捆绑包的一部分

时间:2012-04-08 12:50:24

标签: android if-statement nullpointerexception bundles

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

    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”的包中传递了一些内容,因为它在调试器中显示为bundle的一部分。

我还尝试先把它从捆绑中拉出来,然后尝试比较它。将它从捆绑中拉出后,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");
    }

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

1 个答案:

答案 0 :(得分:3)

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

if (prvEvm != null){

此外,equals(null)始终返回false。