处理 android 中空值的更好方法?
Better way to handle null values in android?
每当我需要从 android 中的另一个 activity/intent 等获取一些数据时,我的代码基本上必须遵循以下逻辑:
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
}
}
在我看来,代码非常冗长且嵌套非常多,每次我这样做时我都会想自己 "there's gotta be a better way"。
Is there and what would that be?
一个不好的做法,但更短(而且没有):
try {
switch (getIntent().getAction()) {
case "whatever": ...
...
}
} catch e {}
您可以将 if-statements
合二为一。您不会收到错误,因为代码将 'exit' 一旦 &&
returns 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
}
我个人只会创建一些辅助方法来清理主要逻辑。如果这是经常出现的代码,您可以创建一个基础 Activity
class 来保存 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
}
}
使用开关:
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;
每当我需要从 android 中的另一个 activity/intent 等获取一些数据时,我的代码基本上必须遵循以下逻辑:
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
}
}
在我看来,代码非常冗长且嵌套非常多,每次我这样做时我都会想自己 "there's gotta be a better way"。
Is there and what would that be?
一个不好的做法,但更短(而且没有):
try {
switch (getIntent().getAction()) {
case "whatever": ...
...
}
} catch e {}
您可以将 if-statements
合二为一。您不会收到错误,因为代码将 'exit' 一旦 &&
returns 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
}
我个人只会创建一些辅助方法来清理主要逻辑。如果这是经常出现的代码,您可以创建一个基础 Activity
class 来保存 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
}
}
使用开关:
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;