web-dev-qa-db-ja.com

IntentエクストラがAndroidに存在するかどうかを確認するにはどうすればよいですか?

私のアプリの多くの場所から呼び出されるActivityのIntentで余分な値をチェックする次のコードがあります。

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

IsNewItemが設定されていない場合、コードはクラッシュしますか?呼び出す前に設定されているかどうかを確認する方法はありますか?

これを処理する適切な方法は何ですか?

48
Ethan Allen

他の人が言ったように、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.
    }
}
_

containsKey("isNewItem")は余分なものが存在しない場合はfalseを返すため、実際にgetBoolean("isNewItem", 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);
_

実際、ここでの方法はどれでも受け入れられます。あなたにとって意味のあるものを選んで、そのようにしてください。

103
twaddington

あなたはこれを行うことができます:

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

問題はgetBoolean()ではなく、getIntent().getExtras()である

この方法でテストします。

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

ところで、isNewItemが存在しない場合、デフォルトの値falseを返します。

よろしく。

7
Luis

getIntent()は、nullがない場合はIntentを返します。

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

使用するまでクラッシュしません!存在する場合は取得する必要はありませんが、何らかの理由で存在しない「追加」を使用しようとすると、システムがクラッシュします。

だから、次のようなことをしてみてください:

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

boolean myBool=false;

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

このようにして、アプリがクラッシュしないようにします。 (そして、有効なIntentがあることを確認してください:))

0
yugidroid