2016-04-27 8 views
0

Jedes Mal, wenn ich einige Daten aus einer anderen Aktivität/Absicht usw. in android meines Code bekommen muß im wesentlichen dieser Logik folgen:Bessere Möglichkeit, Null-Werte in Android zu behandeln?

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 
    } 
} 

Sehr ausführlich und sehr verschachtelten Code meiner Meinung nach und jedesmal, wenn ich dies tue mich, denke mir: "Es muss einen besseren Weg geben".

Gibt es und was wäre das?

+2

Was passiert, wenn Sie überprüfen 'getIntent() getExtras() = null '? –

+0

können Sie versuchen, catch Block für Nullzeiger Ausnahme – miskohut

+0

, wenn Sie das gleiche Snippet mehrere Zeit haben, warum es nicht statisch machen? – k0sh

Antwort

0

Sie diese if-statements in eine kombinieren. Sie erhalten keinen Fehler, da der Code "Exit" wird, sobald das erste Argument vor dem &&false zurückgibt.

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 

} 

Oder hier ist ein noch kürzerer Weg, dank einen Vorschlag von @Tomkarho.

Intent intent = getIntent(); 

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

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

} 
+0

Was, wenn intent.getAction() null ist? –

+1

@Mark Kann Ihre Lösung nicht noch mehr mit TextUtils vereinfacht werden? if (intent! = null && TextUtils.equals (Absicht.getAction(), "was auch immer")) – Tomkarho

+0

@ Tomkarho Sie sind richtig! Clever. Ich habe meine Antwort aktualisiert, um noch einen anderen Weg einzuschließen. –

-2

Eine schlechte pratice, aber kürzer (und nicht wenn):

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

ist es nicht ein vielleicht, es ist sicher eine schlechte Praxis, alles in Versuch zu fangen fangen – k0sh

0

Ich persönlich würde nur ein paar Helfer Methoden schaffen die Hauptlogik zu bereinigen. Wenn dieser Code häufig angezeigt wird, können Sie eine Basisklasse Activity erstellen, um die getIntentAction-Methode zu speichern, oder eine statische Methode in einem Helper erstellen, der entweder Activity oder Intent als Parameter verwendet.

Für den Stringvergleich können Sie TextUtils.equals() verwenden. Wenn Sie über eine Zeichenfolge verfügen, die den Aktionsname enthält, können Sie das alternativ als die linke Seite der equals Methode verwenden. Stellen Sie sicher, dass Sie die Bestellung nicht zu einem späteren Zeitpunkt tauschen.

Einige Beispielcode:

public static final String WhateverAction = "whatever"; 

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

Mit vergleichen Zeichenfolge auf der linken Seite:

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 
    } 
} 

TextUtils Verwendung:

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 
    } 
} 

Mit einem Schalter:

public void processMyIntentSwitch() 
{ 
    String action = getIntentAction(); 
    switch(action) 
    { 
     case WhateverAction: 
      //... 
      break; 

     default: 
      // got null or unexpected value 
    } 
} 

Sie auch weg mit nicht mit einer getIntentAction Methode nur tun, diese Einzeiler bekommen konnte, obwohl es ein bisschen wortreich ist.!

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