检查Java中的空值

时间:2016-06-03 15:06:29

标签: java android json gson

我试图修改从服务器中提取一些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的菜鸟,所以请尽可能提供参考。

6 个答案:

答案 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 == ""