Intereting Posts
NullPointerException при отражении во время запуска Robolectric – любые подсказки? Как я могу отправить приложение для Android, которое я разрабатываю для кого-то по электронной почте? Двигатель андроидной физики Недостаточно разрешений для устройства в Android Studio Workspace, работающем в openSUSE 13.2 Google map v2 Пользовательская информация с двумя кнопками мыши или ImageView Как добавить кнопки в верхней части фрагмента карты API v2 layout Как создать круговой просмотрщик? Как вернуть результат посредством нескольких действий DTN (Delay Tolerant Networking) на Android Proguard – также использовать файлы proguard из модулей «Open Declaration» в Eclipse переходит к файлам классов вместо исходных файлов для Android-библиотек Android: пропустить Gradle «testClasses» для проекта зависимости Google Cloud Messaging (GCM) – невозможно создать экземпляр получателя – java.lang.ClassNotFoundException Как открыть сайт при нажатии кнопки в приложении Android? Как изменить цвет текста центра ввода в Android

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

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

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

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

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

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

Как говорили другие, 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 :))