我正在处理一个应用程序,从列表视图中我创建了一个包含所选项目和前一项目的包。我需要确定的是前一个项目是否实际捆绑了。如果它存在,我想要的信息,但如果它不存在,那么我需要设置我的文本视图来反映这一点。但是如果在尝试加载接收活动时它不存在,我会得到一个空指针异常(捆绑活动不会导致我在调试期间发现的崩溃 - 我到达了我正在测试数据的地步捆绑之前崩溃)。所以我已经包含了接收活动中的代码。
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,我想测试它,以便如果是,则不使用该对象。它只会为空一次。
答案 0 :(得分:3)
在null对象上调用方法(等于)时,不要使用equals(null)
。相反,与null比较:
if (prvEvm != null){
此外,equals(null)
始终返回false。