it-swarm.com.de

Wie kann ich feststellen, ob Intent-Extras in Android vorhanden sind?

Ich habe diesen Code, der nach einem zusätzlichen Wert in einer Absicht für eine Aktivität sucht, die an vielen Stellen in meiner App aufgerufen wird:

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

Wenn isNewItem nicht festgelegt ist, stürzt mein Code ab? Gibt es eine Möglichkeit, festzustellen, ob es festgelegt wurde oder nicht, bevor ich es anrufe?

Was ist der richtige Weg, um damit umzugehen?

48
Ethan Allen

Wie andere gesagt haben, können sowohl getIntent() als auch getExtras() null zurückgeben. Aus diesem Grund möchten Sie die Aufrufe nicht miteinander verketten, da Sie sonst möglicherweise null.getBoolean("isNewItem"); aufrufen, wodurch ein NullPointerException ausgelöst wird und Ihre Anwendung abstürzt.

Hier ist, wie ich das erreichen würde. Ich denke, es ist auf die schönste Art und Weise formatiert und wird von jemand anderem, der möglicherweise Ihren Code liest, sehr leicht verstanden.

// 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.
    }
}

Sie brauchen den Aufruf von containsKey("isNewItem") nicht wirklich, da getBoolean("isNewItem", false) false zurückgibt, wenn das Extra nicht existiert. Sie könnten das oben Genannte auf so etwas verdichten:

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

Sie können auch die Methoden Intent verwenden, um direkt auf Ihre Extras zuzugreifen. Dies ist wahrscheinlich der sauberste Weg, dies zu tun:

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

Wirklich sind alle Methoden hier annehmbar. Wählen Sie eine, die für Sie sinnvoll ist, und machen Sie es so.

103
twaddington

Du kannst das:

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

Das Problem ist nicht die getBoolean(), sondern die getIntent().getExtras()

Testen Sie diesen Weg:

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

übrigens, wenn isNewItem nicht existiert, gibt es de default vaule false zurück.

Grüße.

7
Luis

getIntent() gibt null zurück, wenn es kein Intent gibt. Verwenden Sie also ...

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

Es wird nicht abstürzen, bis Sie es verwenden! Sie müssen es nicht bekommen, wenn es existiert, aber wenn Sie aus irgendeinem Grund versuchen, ein "Extra" zu verwenden, das nicht existiert, stürzt Ihr System ab.

Also versuchen Sie etwas zu tun wie:

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

boolean myBool=false;

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

Auf diese Weise stellen Sie sicher, dass Ihre App nicht abstürzt. (und stellen Sie sicher, dass Sie ein gültiges Intent :) haben)

0
yugidroid