Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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
        }

    }