错误:在没有NFC的设备上启动活动时出现NullPointerException

时间:2015-12-29 11:16:07

标签: java android nullpointerexception operators nfc

我为NFC手机创建了一个应用程序。如果设备支持NFC,则应用应启动一项活动,如果设备支持NFC,则应启动另一项活动。

因此,在启动时,我已经完成了过滤NFC与非NFC手机的过滤:

mNfc = NfcAdapter.getDefaultAdapter(this);
if (mNfc == null | !mNfc.isEnabled()) {
    Intent a = new Intent(AA.this, AB.class);
    a.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(a);
} else {
    Intent b = new Intent(AA.this, BB.class);
    b.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(b);
}

这适用于NFC手机(即使禁用NFC)。但是,在非NFC手机上,这会导致以下例外情况:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {MainActivity}:java.lang.NullPointerException

出于测试目的,我在非NFC手机上完成了这项工作

if (mNfc == null) {
    Toast.makeText(this, "This device doesn't support NFC.", Toast.LENGTH_LONG).show();     
}

这没有任何例外,我看到了吐司的消息。

1 个答案:

答案 0 :(得分:4)

问题是您在表达式

中使用了按位OR运算符(|
if (mNfc == null | !mNfc.isEnabled()) {

这会导致评估mNfc == null!mNfc.isEnabled()。因此,您在isEnabled()对象引用(null)上致电mNfc

更改表达式以使用逻辑OR运算符(||

if (mNfc == null || !mNfc.isEnabled()) {

然后将首先计算表达式mNfc == null,并且当它计算为true时(这意味着整个逻辑表达式必须求值为true),表达式的剩余部分根本不会被评估。因此,在这种情况下不会调用mNfc.isEnabled()