gpt4 book ai didi

java - 错误 : NullPointerException when starting activity on devices without NFC

转载 作者:行者123 更新时间:2023-11-29 03:01:35 24 4
gpt4 key购买 nike

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

所以在启动时我已经完成了这个来过滤 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: Unable to start activity ComponentInfo{MainActivity}: java.lang.NullPointerException

出于测试目的,我在非 NFC 手机上完成了此操作

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

这毫无异常(exception)地工作,我看到了 toast 消息。

最佳答案

问题是您在表达式中使用了按位或运算符 (|)

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

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

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

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

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

关于java - 错误 : NullPointerException when starting activity on devices without NFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34509850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com