2012-11-16 16 views
39

は、私は私のアプリでは多くの場所から呼び出された活動に熱心に余分の値をチェックし、このコードを持っている:Androidにインテントエクストラが存在するかどうかはどのようにして確認できますか?

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

isNewItemが設定されていない場合は、私のコードのクラッシュがだろうか?私がそれを呼び出す前に、それが設定されているかどうかを知る方法はありますか?

これを処理する適切な方法は何ですか? isNewItemが存在しない場合は、デフォルトのvaule falseデ返し、方法によって

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

答えて

92

他の人が言っているように、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); 

ここの方法はまったく問題ありません。あなたに意味のあるものを選び、そのようにします。

+2

私が理解し、問題を持っている人は、 '最初の場所で()' getExtrasを使用する理由。それはなぜですか? 'Intent'クラスには、' extra 'を得るために必要なすべてのメソッドがあります。 'Bundle'を取得する必要はありません。 – Squonk

+3

ありがとう@Squonk、それは良い点です。列挙するエキストラがたくさんあるときは、 'Intent'から' Bundle'全体を取得するのが少し面倒です。 – twaddington

+0

これについて考えてみると、私のコメントは、ほとんどの場合、私が通常「意図」を分析したいという事実に基づいていました。例えば、私は 'アクション'、 'カテゴリ'などを知りたいと思う。これを行うには、最初に「インテント」を取得し、後でエクストラに集中します。 OPの質問の場合、あなたの答えは完全に有効です。 – Squonk

7

問題がgetBoolean()が、getIntent().getExtras()

テストこの方法ではありません。

よろしくお願いいたします。

1

getIntent()ので使用何らIntentがない場合はnullを返します...

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

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

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

boolean myBool=false; 

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

アプリがクラッシュしないことを確認してください。この方法は:

だから、のような何かをOしてみてください。 (有効なIntent :)を持っていることを確認してください)

3

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

Intent intent = getIntent(); 
if(intent.hasExtra("isNewItem")) { 
    intent.getExtras().getBoolean("isNewItem"); 
} 
関連する問題