2016-04-27 14 views
0

私は私のコードは、基本的にこのロジックに従わなければならアンドロイドになど目的別のアクティビティ/からいくつかのデータを取得する必要があるとき:アンドロイドでヌル値を処理する方がいいですか?

Intent intent = getIntent(); 

if (intent != null) { 
    String intentAction = intent.getAction(); 

    if (intentAction != null && intentAction.equals("whatever")) { 

    // Do some stuff now that we know there are now null values 
    } 
} 

非常に詳細な、非常にネストされた私の意見では、コードと私がやるたびに、このI自分自身に "良い方法があるはず"と考えてください。

そこには何がありますか?

+2

何をチェックすると、 'getIntent()getExtras()= NULL '? –

+0

同じスニペットを複数回持っているのであれば、nullポインタ例外のtry catchブロックを – miskohut

+0

にすることができます。 – k0sh

答えて

0

あなたは一つにこれらのif-statementsを組み合わせることができます。 &&が返される前の最初の引数にコードが 'exit'されるので、エラーは発生しません。falseが返されます。

Intent intent = getIntent(); 

if (intent != null && intent.getAction() != null && intent.getAction().equals("whatever") { 

    // Do some stuff now that we know there are now null values 

} 

@Tomkarhoの提案のおかげで、さらに短くなりました。

Intent intent = getIntent(); 

if (intent != null && "whatever".equals(intent.getAction()) { 

    // Do some stuff now that we know there are now null values 

} 
+0

intent.getAction()がnullの場合はどうなりますか? –

+1

@マークTextUtilsでは、あなたのソリューションをさらに単純化することはできませんか? if(intent!= null && TextUtils.equals(int。getAction()、 "whatever")) – Tomkarho

+0

@ Tomkarhoあなたは正しいです!スマート。私はまだ別の方法を含めるために私の答えを更新しました。 –

-2

悪いpratice、より短い(となしている場合):

try { 
    switch (getIntent().getAction()) { 
     case "whatever": ... 
      ... 
     } 
} catch e {} 
+0

それは多分、試しにすべてをラップする悪い練習であることは確かです – k0sh

0

私は個人的には、メインロジックをクリーンアップするいくつかのヘルパーメソッドを作成します。これが頻繁に表示されるコードの場合はgetIntentActionメソッドを保持する基底クラスActivityを作成するか、ActivityまたはそのIntentをパラメータとして持つヘルパーで静的メソッドを作成します。

文字列の比較では、TextUtils.equals()を使用できます。また、アクション名を含むStringがある場合は、equalsメソッドの左側に使用することができます。後で注文を交換しないようにしてください。

いくつかのサンプルコード:スイッチを使用

public void processMyIntentTextUtils() 
{ 
    String action = getIntentAction(); 
    if(TextUtils.equals(action, WhateverAction)) 
    { 
     // do something 
    } 
    if(TextUtils.equals(action, "anotherAction")) 
    { 
     // do something else 
    } 
    else 
    { 
     // got null or unexpected value 
    } 
} 

TextUtilsを使用
public void processMyIntent() 
{ 
    String action = getIntentAction(); 
    if(WhateverAction.equals(action)) 
    { 
     // do something 
    } 
    else if("thisAlsoWorksAction".equals(action) 
    { 
     // do something else 
    } 
    else 
    { 
     // got null or unexpected value 
    } 
} 

:左側の比較文字列を使用して

public static final String WhateverAction = "whatever"; 

public String getIntentAction() 
{ 
    Intent intent = getIntent(); 
    return intent == null ? null : intent.getAction(); 
} 

それは長ったらしい少しだけれども

ます。また、ちょうどこのワンライナーを実行してgetIntentAction方法を持っていないと逃げることもできます。!

String intentAction = getIntent() != null ? getIntent().getAction() : null;