安卓在Java中检查空值
我正在尝试修改一个Android应用程序,该应用程序正在从服务器提取一些JSON
JSONObject mResult = new JSONObject((String) result);
然后用它从我的赞助商类构造一个对象
Gson mGson = new Gson();
mSponsor = mGson.fromJson(mResult.getJSONObject("data").getJSONObject("sponsor").toString(), Sponsor.class);
发起类只是一个包含setter和getter的shell,没有完成任何逻辑。大概是这样的:
public class Sponsor {
@SerializedName("address1")
private String Address1;
@SerializedName("address2")
private String Address2;
public Sponsor(String address1, String address2) {
Address1 = address1;
Address2 = address2;
}
public Sponsor() {
Address1 = "";
Address2 = "";
}
public String getAddress1() {
return Address1;
}
public void setAddress1(String address1) {
Address1 = address1;
}
public String getAddress2() {
return Address2;
}
public void setAddress2(String address2) {
Address2 = address2;
}
}
该应用程序将地址放在文本视图中,如下所示:
txtAddress = (TextView) view.findViewById(R.id.txt_sponsor_address);
txtAddress.setText(mSponsor.getAddress1() + "\n" + mSponsor.getAddress2());
这一切都有效,除了当服务器返回null
for address2
时,在这种情况下,文本文本“null”将打印在文本视图中,其中address2应为空
我的问题是,我如何才能摆脱“空”
我尝试了一些不同的方法,从一个简单的三元语句开始,变得越来越冗长,但没有一种方法能奏效
以下是我迄今为止尝试过的最新和最可笑的事情:
String addr2 = ((String) mSponsor.getAddress2()).trim();
String a2;
if((addr2 == "null") || (addr2 == "")) a2 = (String) "";
else a2 = (String) addr2;
txtAddress.setText(mSponsor.getAddress1() + "\n" + a2);
这会导致应用程序在我打开该活动时崩溃
我是Java的noob,如果可以,请提供参考资料
# 1 楼答案
# 2 楼答案
为你的
getter
代码试试这个:当然,对于
Address1
,你也可以对你的另一个getter
做同样的事情。 此外,如果要检查空字符串,请使用Address2.length() == 0
而不是Address2 == ""
# 3 楼答案
你不应该使用:
用于字符串比较:
# 4 楼答案
这个怎么样
# 5 楼答案
您可以在
Sponsor
类中创建另一个getter,将逻辑放在其中以获取格式化的地址:然后简单地用:
txtAddress.setText(mSponsor.getFormattedAddress());
# 6 楼答案
“getAddress2()”没有返回文本字符串“null”。它返回一个
null
引用,当您在串联中打印它时,StringBuilder将其转换为“null”字符串。这就是为什么当你试图删减单词时它会崩溃解决这个问题的一个简单方法是将三元运算符放入getter本身,如下所示:
现在,您将永远不会返回空引用,并且无需任何检查即可安全地使用它