他の人が言っているように、getIntent()
とgetExtras()
の両方がnullを返す場合があります。このため、呼び出しを連鎖させたくない場合は、を呼び出すと、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.
}
}
あなたが実際に余分が存在しない場合getBoolean("isNewItem", false)
としてcontainsKey("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);
ここの方法はまったく問題ありません。あなたに意味のあるものを選び、そのようにします。
私が理解し、問題を持っている人は、 '最初の場所で()' getExtrasを使用する理由。それはなぜですか? 'Intent'クラスには、' extra 'を得るために必要なすべてのメソッドがあります。 'Bundle'を取得する必要はありません。 – Squonk
ありがとう@Squonk、それは良い点です。列挙するエキストラがたくさんあるときは、 'Intent'から' Bundle'全体を取得するのが少し面倒です。 – twaddington
これについて考えてみると、私のコメントは、ほとんどの場合、私が通常「意図」を分析したいという事実に基づいていました。例えば、私は 'アクション'、 'カテゴリ'などを知りたいと思う。これを行うには、最初に「インテント」を取得し、後でエクストラに集中します。 OPの質問の場合、あなたの答えは完全に有効です。 – Squonk