Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:在没有NFC的设备上启动活动时出现NullPointerException_Java_Android_Nullpointerexception_Operators_Nfc - Fatal编程技术网

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

Java 错误:在没有NFC的设备上启动活动时出现NullPointerException,java,android,nullpointerexception,operators,nfc,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_ACT

我已经为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:无法启动活动组件信息{MainActivity}:java.lang.NullPointerException

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

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

这是毫无例外的,我看到了toast消息。

问题是您在表达式中使用了位OR运算符(

if (mNfc == null | !mNfc.isEnabled()) {
这会导致
mNfc==null
!mNfc.isEnabled()
待评估。因此,在
null
对象引用(
mNfc
)上调用
isEnabled()

将表达式更改为使用逻辑OR运算符时(
|


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

问题在于表达式中使用了位OR运算符(
|

if (mNfc == null | !mNfc.isEnabled()) {
这会导致
mNfc==null
!mNfc.isEnabled()
待评估。因此,在
null
对象引用(
mNfc
)上调用
isEnabled()

将表达式更改为使用逻辑OR运算符时(
|

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