web-dev-qa-db-fra.com

Comment savoir si des extras d'intention existent dans Android?

J'ai ce code qui vérifie la valeur d'un extra dans une intention sur une activité qui est appelée à partir de nombreux endroits dans mon application:

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

Si isNewItem n'est pas défini, mon code se bloquera-t-il? Existe-t-il un moyen de savoir s'il a été défini ou non avant de l'appeler?

Quelle est la bonne façon de gérer cela?

48
Ethan Allen

Comme d'autres l'ont dit, getIntent() et getExtras() peuvent retourner null. Pour cette raison, vous ne voulez pas enchaîner les appels ensemble, sinon vous pourriez finir par appeler null.getBoolean("isNewItem"); qui lèvera un NullPointerException et provoquera le plantage de votre application.

Voici comment j'accomplirais cela. Je pense qu'il est formaté de la manière la plus agréable et est très facilement compris par quelqu'un d'autre qui pourrait lire votre 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.
    }
}

Vous n'avez pas réellement besoin de l'appel à containsKey("isNewItem") car getBoolean("isNewItem", false) renverra false si le supplément n'existe pas. Vous pouvez condenser ce qui précède à quelque chose comme ceci:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    boolean isNew = extras.getBoolean("isNewItem", false);
    if (isNew) {
        // Do something
    } else {
        // Do something else
    }
}

Vous pouvez également utiliser les méthodes Intent pour accéder directement à vos extras. C'est probablement la façon la plus propre de le faire:

boolean isNew = getIntent().getBooleanExtra("isNewItem", false);

Vraiment, toutes les méthodes ici sont acceptables. Choisissez-en un qui vous convient et faites-le de cette façon.

103
twaddington

Tu peux le faire:

Intent intent = getIntent();
if(intent.hasExtra("isNewItem")) {
   intent.getExtras().getBoolean("isNewItem");
}
9
Merhawi Fissehaye

Le problème n'est pas la getBoolean() mais la getIntent().getExtras()

Testez de cette façon:

if(getIntent() != null && getIntent().getExtras() != null)
  myBoolean = getIntent().getExtras().getBoolean("isNewItem");

soit dit en passant, si isNewItem n'existe pas, il retourne le vaule par défaut false.

Cordialement.

7
Luis

getIntent() renverra null s'il n'y a pas Intent alors utilisez ...

boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
    isNewItem = i.getBooleanExtra("isNewItem", false);
1
Squonk

Il ne plantera pas tant que vous ne l'utiliserez pas! Vous n'avez pas besoin de l'obtenir s'il existe mais si vous essayez, pour une raison quelconque, d'utiliser un "extra" qui n'existe pas, votre système se bloquera.

Alors, essayez de faire quelque chose comme:

final Bundle bundle = getIntent().getExtras();

boolean myBool=false;

if(bundle != null) {
    myBool = bundle.getBoolean("isNewItem");
}

De cette façon, vous vous assurez que votre application ne plante pas. (et assurez-vous d'avoir un Intent :) valide)

0
yugidroid