Как узнать, существуют ли дополнительные возможности в Android?

У меня есть этот код, который проверяет значение дополнительного в Intent для Activity, вызываемого из многих мест в моем приложении:

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

Если isNewItem не установлен, произойдет ли сбой моего кода? Есть ли способ узнать, было ли это задано или нет, прежде чем я позвоню?

Каков правильный способ справиться с этим?

Как говорили другие, getIntent() и getExtras() могут возвращать значение null. Из-за этого вы не хотите объединять вызовы вместе, иначе вы можете вызвать null.getBoolean("isNewItem"); NullPointerException вызовет 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()

Проверьте этот способ:

 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 :))