簡體   English   中英

在Java中檢查空值

[英]Checking for null values in Java

我正在嘗試修改從服務器提取一些JSON的Android應用。

JSONObject mResult = new JSONObject((String) result);

然后使用它來構造我的Sponsor類的對象。

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());

這一切都有效,除非服務器為address2返回null ,在這種情況下,文本文本“ null”被打印在TextView中應該位於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的菜鳥,所以請提供參考。

您可以在Sponsor人類中創建另一個getter,在其中您可以輸入邏輯來獲取格式化的地址:

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 ("");
}

然后簡單地使用setText:

txtAddress.setText(mSponsor.getFormattedAddress());

“ getAddress2()”未返回文字字符串“ null”。 它返回null引用,並且在串聯中打印時,StringBuilder會將其轉換為“空”字符串。 這就是為什么當您嘗試修剪單詞時它崩潰的原因。

解決該問題的一種簡單方法是將三元運算符放入getter本身,如下所示:

public String getAddress2() {
  return (Address2 == null) ? "" : Address2;
}

現在,您將永遠不會返回空引用,並且無需進行任何檢查就可以安全地使用它。

您不應該使用:

if((addr2 == "null")

對於字符串比較,請使用:

if (addr2.equalsIgnoreCase("null"))
String addr2 = mSponsor.getAddress2();
if(!TextUtils.isEmpty(addr2) || !addr2.equalsIgnoreCase("null")
     txtAddress.setText(mSponsor.getAddress1() + "\n" + addr2);
else
     txtAddress.setText(mSponsor.getAddress1());

這個怎么樣?

// 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);

試試這個你getter的代碼:

 public String getAddress2() {
    if (Address2.equals("null")) {
        Address2="";
    }
    return Address2;
 }

當然,您可以對Address1的其他getter進行相同的操作。 另外,如果要檢查空字符串,請使用Address2.length() == 0而不是Address2 == ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM