我试图解决空指针异常问题,这使我无法填充数组适配器。我已将其追溯到我创建类的实例的位置,因此为了尝试进行故障排除,我创建了以下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只在我工作的片段中被调用一次。
答案 0 :(得分:-1)
在第一行中,您将s变量引用到新的拆分对象,在第二行中,您将s的引用更改为 mTransaction.getSplit() 。如果 mTransaction.getSplit()返回的对象为null,那么你的s将引用null。意味着s的值将为null。
Split s = new Split();
s = mTransaction.getSplit();
你的 mTransaction.getSplit()可能会返回空值,尝试调试它