我试图修改从服务器中提取一些JSON的Android应用程序..
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;
}
}
应用程序将地址放在TextView中,如下所示:
txtAddress = (TextView) view.findViewById(R.id.txt_sponsor_address);
txtAddress.setText(mSponsor.getAddress1() + "\n" + mSponsor.getAddress2());
这一切都有效,除非服务器为null
返回address2
,在这种情况下,文字文本" null"在TextView中打印,其中address2应该是。
我的问题是如何摆脱" null"?
我尝试了一些不同的东西,从一个简单的三元语句开始,并且越来越冗长,没有任何东西可以这样做。
这是迄今为止我尝试过的最新,最荒谬的事情:
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的菜鸟,所以请尽可能提供参考。
答案 0 :(得分:3)
您可以在Sponsor
课程中创建另一个获取者,在那里您可以使用逻辑来获取格式化地址:
public String getFormattedAddress() {
if (!TextUtils.isEmpty(Address1) && !TextUtils.isEmpty(Address2)
&& !Address1.equalsIgnoreCase("null") && !Address2.equalsIgnoreCase("null")) {
return (Address1 + "\n" + Address2);
}
if (!TextUtils.isEmpty(Address1) && !Address1.equalsIgnoreCase("null")) {
return (Address1);
}
if (!TextUtils.isEmpty(Address2) && !Address2.equalsIgnoreCase("null")) {
return (Address2);
}
return ("");
}
然后简单地用以下方法设置文本:
txtAddress.setText(mSponsor.getFormattedAddress());
答案 1 :(得分:3)
" getAddress2()"是不是返回文字字符串" null"。它返回null
引用,StringBuilder将其转换为" null"在串联中打印时的字符串。这就是为什么当你试图修剪这个词时崩溃的原因。
解决这个问题的一个简单方法是将三元运算符放在getter中,如下所示:
public String getAddress2() {
return (Address2 == null) ? "" : Address2;
}
现在您永远不会返回空引用,您可以安全地使用它而无需任何检查。
答案 2 :(得分:1)
你不应该使用:
if((addr2 == "null")
对于字符串比较用法:
if (addr2.equalsIgnoreCase("null"))
答案 3 :(得分:1)
String addr2 = mSponsor.getAddress2();
if(!TextUtils.isEmpty(addr2) || !addr2.equalsIgnoreCase("null")
txtAddress.setText(mSponsor.getAddress1() + "\n" + addr2);
else
txtAddress.setText(mSponsor.getAddress1());
答案 4 :(得分:1)
这个怎么样?
// if null, addr2="", if not null, addr = getAddress2()'s result
String addr2 = mSponsor.getAddress2() == null ? "" : ((String) mSponsor.getAddress2()).trim();
txtAddress.setText(mSponsor.getAddress1() + "\n" + addr2);
答案 5 :(得分:0)
请尝试使用getter
代码:
public String getAddress2() {
if (Address2.equals("null")) {
Address2="";
}
return Address2;
}
当然,您可以对getter
的其他Address1
执行相同操作。
另外,如果要检查空字符串,请使用Address2.length() == 0
而不是Address2 == ""
。