我有这样的代码来检查在一个活动的意图是从我的应用程序很多地方称为一个额外的价值:
getIntent().getExtras().getBoolean("isNewItem")
如果没有设置isNewItem,将我的代码会崩溃吗? 有没有办法告诉如果它被设置或不前,我打电话了吗?
什么是处理这个问题的正确方法?
我有这样的代码来检查在一个活动的意图是从我的应用程序很多地方称为一个额外的价值:
getIntent().getExtras().getBoolean("isNewItem")
如果没有设置isNewItem,将我的代码会崩溃吗? 有没有办法告诉如果它被设置或不前,我打电话了吗?
什么是处理这个问题的正确方法?
正如其他人所说,无论getIntent()
和getExtras()
可能返回null。 正因为如此,你不想链的调用一起,否则你可能最终会调用null.getBoolean("isNewItem");
这将抛出一个NullPointerException
,并导致应用程序崩溃。
以下是我会做到这一点。 我认为这是最好的方式格式化,并很容易被别人谁可能阅读你的代码的理解。
// You can be pretty confident that the intent will not be null here.
Intent intent = getIntent();
// Get the extras (if there are any)
Bundle extras = intent.getExtras();
if (extras != null) {
if (extras.containsKey("isNewItem")) {
boolean isNew = extras.getBoolean("isNewItem", false);
// TODO: Do something with the value of isNew.
}
}
你实际上并不需要调用containsKey("isNewItem")
为getBoolean("isNewItem", false)
将返回false,如果额外的不存在。 你可以凝结在上面是这样的:
Bundle extras = getIntent().getExtras();
if (extras != null) {
boolean isNew = extras.getBoolean("isNewItem", false);
if (isNew) {
// Do something
} else {
// Do something else
}
}
您还可以使用Intent
的方法来直接访问你的临时演员。 这可能是这样做的最彻底的方法:
boolean isNew = getIntent().getBooleanExtra("isNewItem", false);
任何真正的,这里的方法是可以接受的。 选一个对你有意义并且这样做的。
这个问题是不是getBoolean()
但getIntent().getExtras()
测试是这样的:
if(getIntent() != null && getIntent().getExtras() != null)
myBoolean = getIntent().getExtras().getBoolean("isNewItem");
顺便说一下,如果isNewItem
不存在,则返回默认德vaule false
。
问候。
你可以这样做:
Intent intent = getIntent();
if(intent.hasExtra("isNewItem")) {
intent.getExtras().getBoolean("isNewItem");
}
getIntent()
将返回null
,如果没有Intent
所以用...
boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
isNewItem = i.getBooleanExtra("isNewItem", false);
它不会崩溃,除非,直到你使用它! 您不必如果存在得到它,但如果你尝试,因为某些原因,使用哪个没有按一个“额外””存在于您的系统将崩溃。
所以,尽量Ø做这样的事情:
final Bundle bundle = getIntent().getExtras();
boolean myBool=false;
if(bundle != null) {
myBool = bundle.getBoolean("isNewItem");
}
这样,你要确保你的应用程序不会崩溃。 (并确保你有一个有效的Intent
:))