Java中的类实例无法进行null测试

时间:2014-12-16 04:33:17

标签: java android nullpointerexception getter

我试图解决空指针异常问题,这使我无法填充数组适配器。我已将其追溯到我创建类的实例的位置,因此为了尝试进行故障排除,我创建了以下toast:

private void showSplits() {
    // populate the split line
    Split s = new Split();
    s = mTransaction.getSplit();

    int duration = Toast.LENGTH_SHORT;

    if (s != null) {
        Toast toast = Toast.makeText(getActivity(), s.getCategory(), duration);
        Toast toast2 = Toast.makeText(getActivity(), s.getDescription(), duration);
        Toast toast3 = Toast.makeText(getActivity(), s.getAmount(), duration);
        toast.show();
        toast2.show();
        toast3.show();
    } else {
        Toast toast4 = Toast.makeText(getActivity(), "S was null.", duration);
        toast4.show();
    }

.... }

运行时,此方法的结果是整齐地打印出分割的每个字段的内容,然后整齐地打印出来" S为空。"我已经验证过我只调用了一次这个方法,所以我无法看到s如何都是null而不是null。

这里是班级的细节......

public class Split implements Serializable { 

private static final long serialVersionUID = 1L;

private static final String JSON_CATEGORY = "category";
private static final String JSON_AMOUNT = "amount";
private static final String JSON_DESCRIPTION = "description";

private UUID mId;
private String mCategory;
private String mAmount;
private String mDescription;

public Split(String category, String amount, String description) {
     mCategory = category;
     mAmount = amount;
     mDescription = description;
}

public Split() {
    mId = UUID.randomUUID();
    mCategory = "none";
}

public Split(JSONObject json) throws JSONException {
    if (json.has(JSON_CATEGORY)) {
           mCategory = json.getString(JSON_CATEGORY); 
    }
    if (json.has(JSON_AMOUNT)) {
        mAmount = json.getString(JSON_AMOUNT);
    }
    if (json.has(JSON_DESCRIPTION)) {
        mDescription = json.getString(JSON_DESCRIPTION);
    }
}

public JSONObject toJSON() throws JSONException {
    JSONObject json = new JSONObject();
//    if (mCategory != null) {
        json.put(JSON_CATEGORY, mCategory);
//    }
//    if (mAmount != null) {
        json.put(JSON_AMOUNT, mAmount);
//    }
//    if (mDescription != null) {
        json.put(JSON_DESCRIPTION, mDescription);
//    }
    return json;
}

// Factory method to convert an array of JSON objects into a list of objects
// User.fromJson(jsonArray);
public static ArrayList<Split> fromJson(JSONArray jsonObjects) {
       ArrayList<Split> splits = new ArrayList<Split>();
       for (int i = 0; i < jsonObjects.length(); i++) {
           try {
              splits.add(new Split(jsonObjects.getJSONObject(i)));
           } catch (JSONException e) {
              e.printStackTrace();
           }
      }
      return splits;
}

public String getCategory() {
    return mCategory;
}

public void setCategory(String category) {
    mCategory = category;
}

public String getAmount() {
    return mAmount;
}

public void setAmount(String amount) {
    mAmount = amount;
}

public String getDescription() {
    return mDescription;
}

public void setDescription(String description) {
    mDescription = description;
}    

}

据我所知,showSplits只在我工作的片段中被调用一次。

1 个答案:

答案 0 :(得分:-1)

在第一行中,您将s变量引用到新的拆分对象,在第二行中,您将s的引用更改为 mTransaction.getSplit() 。如果 mTransaction.getSplit()返回的对象为null,那么你的s将引用null。意味着s的值将为null。

Split s = new Split();
s = mTransaction.getSplit();

你的 mTransaction.getSplit()可能会返回空值,尝试调试它