私のアプリの多くの場所から呼び出されるActivityのIntentで余分な値をチェックする次のコードがあります。
getIntent().getExtras().getBoolean("isNewItem")
IsNewItemが設定されていない場合、コードはクラッシュしますか?呼び出す前に設定されているかどうかを確認する方法はありますか?
これを処理する適切な方法は何ですか?
他の人が言ったように、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);
_
実際、ここでの方法はどれでも受け入れられます。あなたにとって意味のあるものを選んで、そのようにしてください。
あなたはこれを行うことができます:
Intent intent = getIntent();
if(intent.hasExtra("isNewItem")) {
intent.getExtras().getBoolean("isNewItem");
}
問題はgetBoolean()
ではなく、getIntent().getExtras()
である
この方法でテストします。
if(getIntent() != null && getIntent().getExtras() != null)
myBoolean = getIntent().getExtras().getBoolean("isNewItem");
ところで、isNewItem
が存在しない場合、デフォルトの値false
を返します。
よろしく。
getIntent()
は、null
がない場合はIntent
を返します。
boolean isNewItem = false;
Intent i = getIntent();
if (i != null)
isNewItem = i.getBooleanExtra("isNewItem", false);
使用するまでクラッシュしません!存在する場合は取得する必要はありませんが、何らかの理由で存在しない「追加」を使用しようとすると、システムがクラッシュします。
だから、次のようなことをしてみてください:
final Bundle bundle = getIntent().getExtras();
boolean myBool=false;
if(bundle != null) {
myBool = bundle.getBoolean("isNewItem");
}
このようにして、アプリがクラッシュしないようにします。 (そして、有効なIntent
があることを確認してください:))