如何知道Android中是否存在意图附加组件?
我有这样的代码,检查从我的应用程序中的许多地方调用的活动上的意图中额外的值:
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. } }
您实际上不需要调用hasExtra("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()
这样testing:
if(getIntent() != null && getIntent().getExtras() != null) myBoolean = getIntent().getExtras().getBoolean("isNewItem");
顺便说一下,如果isNewItem
不存在,它会返回默认值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
:))
哟utilizo el siguiente sintaxtis:
Bundle extras = getIntent().getExtras(); Logger.d("Verificamos variable enviadas"); if(extras != null){ Logger.d("Si hay exras"); String tempIdPaqueteP = extras.getString("adapterIdPaqueteP",null); if(tempIdPaqueteP != null){ // Si existe la variable adapterIdPaqueteP Logger.d("Si id:" + tempIdPaqueteP); }else { // Si no existe la variable adapterIdPaqueteP } }
- Android的startCamera给我空意图和…它是否会摧毁我的全局variables?
- 从Eclipse切换到适用于Android开发的IntelliJ IDEA的好处
- TabLayout选项卡样式
- Android Webview – 完全清除caching
- 谷歌播放alpha和betatesting仪function
- android:focus,enabled,pressed和selected状态有什么区别?
- 错误膨胀类android.support.design.widget.NavigationView
- 如何使用v7 / v14首选项支持库?
- 如何禁用Android中的家庭和其他系统button?