[英]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.