2016-04-27 27 views
0

每当我需要从另一个活动的一些数据/意图等android的我的代码基本上是必须遵循这样的逻辑:更好的方式来处理Android中的空值?

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

非常详细,非常嵌套代码在我看来,每一次我这样做我想想自己“有更好的办法”。

有没有,那会是什么?

+2

如果你检查'getIntent()getExtras()= NULL '? –

+0

如果你有多个相同的代码片段,你可以使用try catch块作为空指针异常 – miskohut

+0

为什么不使它成为静态的? – k0sh

回答

0

可以将这些if-statements合二为一。您不会收到错误,因为在&&返回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()为空? –

+1

@Mark您的解决方案无法使用TextUtils进一步简化吗?如果(intent!= null && TextUtils.equals(intent。getAction(),“无论”)) – Tomkarho

+0

@ Tomkarho你是对的!聪明。我已经更新了我的答案,以包含另一种方式。 –

-2

一个坏的初步实践,但较短的(没有如果):

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

它不是一个可能,它肯定是一个不好的做法,以包裹一切在尝试catch – k0sh

0

我个人只是创建一些辅助方法来清理主逻辑。如果这是经常出现的代码,您可以创建一个基类Activity类来保存getIntentAction方法,或者在帮助程序中创建一个静态方法,该帮助程序将Activity或其Intent作为参数。

对于字符串比较,您可以使用TextUtils.equals()。或者,如果您有一个包含操作名称的字符串,则可以将其用作equals方法的左侧。只要确保你稍后不交换订单。

一些示例代码:

public static final String WhateverAction = "whatever"; 

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

使用左手边比较字符串:

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

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

使用switch:

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

     default: 
      // got null or unexpected value 
    } 
} 

你也可以用不只是在做这一个班轮具有getIntentAction方法蒙混过关,虽然这是一个有点罗嗦:!

String intentAction = getIntent() != null ? getIntent().getAction() : null; 
相关问题