How do I tell if Intent extras exist in Android?
android, android-intent, java
Solution
As others have said, both `getIntent()` and `getExtras()` may return null. Because of this, you don't want to chain the calls together, otherwise you might end up calling `null.getBoolean("isNewItem");` which will throw a `NullPointerException` and cause your application to crash.
Here's how I would accomplish this. I think it's formatted in the nicest way and is very easily understood by someone else who might be reading your code.
// 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.
}
}
You don't actually need the call to `containsKey("isNewItem")` as `getBoolean("isNewItem", false)` will return false if the extra does not exist. You could condense the above to something like this:
Bundle extras = getIntent().getExtras();
if (extras != null) {
boolean isNew = extras.getBoolean("isNewItem", false);
if (isNew) {
// Do something
} else {
// Do something else
}
}
You can also use the `Intent` methods to access your extras directly. This is probably the cleanest way to do so:
boolean isNew = getIntent().getBooleanExtra("isNewItem", false);
Really any of the methods here are acceptable. Pick one that makes sense to you and do it that way.
Problem
I have this code that checks for a value of an extra in an Intent on an Activity that is called from many places in my app: ``` getIntent().getExtras().getBoolean("isNewItem") ``` If isNewItem isn't set, will my code crash? Is there any way to tell if it's been set or not before I call it? What is the proper way to handle this?