55

アプリの多くの場所から呼び出されたアクティビティのインテントでエクストラの値をチェックする次のコードがあります。

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

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

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

4

5 に答える 5

118

他の人が言ったように、両方ともgetIntent()nullgetExtras()を返す場合があります。このため、呼び出しを連鎖させたくありません。そうしないと、呼び出しが発生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")エクストラが存在しない場合、 asgetBoolean("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);

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

于 2012-11-16T00:39:29.853 に答える
8

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

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

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

ちなみに、isNewItem存在しない場合はデフォルト値を返しますfalse

よろしく。

于 2012-11-16T00:15:26.143 に答える
1

getIntent()null使用しない場合は戻りIntentます...

boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
    isNewItem = i.getBooleanExtra("isNewItem", false);
于 2012-11-16T00:15:54.070 に答える
0

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

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

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

boolean myBool=false;

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

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

于 2012-11-16T00:17:04.117 に答える