Как узнать, существуют ли дополнительные функции в Android?
У меня есть этот код, который проверяет значение дополнительного в Intent для Activity, вызываемого из многих мест в моем приложении:
getIntent().getExtras().getBoolean("isNewItem")
Если isNewItem не установлен, произойдет ли сбой моего кода? Есть ли способ определить, было ли оно установлено или нет, прежде чем я его назову?
Каков правильный способ справиться с этим?
Ответы
Ответ 1
Как говорили другие, оба 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);
Действительно, любой из методов здесь приемлем. Выберите тот, который имеет смысл для вас и сделает это таким образом.
Ответ 2
Проблема не в getBoolean()
, а в getIntent().getExtras()
Проверьте этот способ:
if(getIntent() != null && getIntent().getExtras() != null)
myBoolean = getIntent().getExtras().getBoolean("isNewItem");
кстати, если isNewItem
не существует, он возвращает значение по умолчанию vaule false
.
С уважением.
Ответ 3
Вы можете сделать это:
Intent intent = getIntent();
if(intent.hasExtra("isNewItem")) {
intent.getExtras().getBoolean("isNewItem");
}
Ответ 4
getIntent()
вернет null
, если нет Intent
, поэтому используйте...
boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
isNewItem = i.getBooleanExtra("isNewItem", false);
Ответ 5
Он не сработает, пока вы его не используете! Вам не обязательно получать его, если он существует, но если вы попытаетесь по какой-то причине использовать "лишний", который не существует, ваша система выйдет из строя.
Итак, попробуйте сделать что-то вроде:
final Bundle bundle = getIntent().getExtras();
boolean myBool=false;
if(bundle != null) {
myBool = bundle.getBoolean("isNewItem");
}
Таким образом вы убедитесь, что ваше приложение не будет аварийно завершено. (и убедитесь, что у вас есть действительный Intent
:))
Ответ 6
yo 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
}
}