如何判断Android中是否存在Intent附加功能?

时间:2012-11-16 00:05:53

标签: java android android-intent

我有这个代码检查从我的应用程序中的许多地方调用的Activity上的Intent中的额外值:

getIntent().getExtras().getBoolean("isNewItem")

如果未设置isNewItem,我的代码会崩溃吗?在我打电话之前,有没有办法判断它是否已经设定?

处理此问题的正确方法是什么?

5 个答案:

答案 0 :(得分:100)

正如其他人所说,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);

这里的任何方法都是可以接受的。选择一个对你有意义并且那样做的。

答案 1 :(得分:7)

问题不在于getBoolean(),而在于getIntent().getExtras()

以这种方式测试:

if(getIntent() != null && getIntent().getExtras() != null)
  myBoolean = getIntent().getExtras().getBoolean("isNewItem");

顺便说一句,如果isNewItem不存在,则返回默认值vaule false

问候。

答案 2 :(得分:7)

你可以这样做:

 {
        "createDate": 1339957800000,
        "modifyDate": 1341197519000,
        "createdBy": "aaa",
        "modifiedBy": "ddd",
        "status": "A",
        "description": "ffff",
        "parentId": null,
        "sourceId": null,
        "source_Field1": null,
        "source_Field2": null,
        "source_Field3": null,
        "source_Field4": null,
        "source_Field5": null,
        "parentKey": null,
        "parentValue": null,
        "genericMasterView":
        {
            "key": "MOD_ONE",
            "value": "195"
        }
    },

答案 3 :(得分:1)

如果没有getIntent()

null将返回Intent,因此请使用...

boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
    isNewItem = i.getBooleanExtra("isNewItem", false);

答案 4 :(得分:0)

除非你使用它,否则它不会崩溃!你不必得到它,如果它存在,但如果你因为某些原因尝试使用一个“额外”而不存在你的系统会崩溃。

所以,尝试做类似的事情:

final Bundle bundle = getIntent().getExtras();

boolean myBool=false;

if(bundle != null) {
    myBool = bundle.getBoolean("isNewItem");
}

这样您就可以确保您的应用不会崩溃。 (并确保您有一个有效的Intent:))