【发布时间】:2017-11-24 16:22:40
【问题描述】:
自定义对象的数组列表可以包含其他自定义对象的数组列表吗?那将如何运作?
我试过了:
public class BankAccount {
private String mTitle;
private float mBalance;
private ArrayList<sE> mHistory;
public BankAccount(String title) {
mTitle = title;
mPrefFile = null;
mBalance = 0;
mHistory = new ArrayList<>();
}
public void changeBalance(float newBalance) {
mBalance = newBalance;
}
public String getTitle() {
return mTitle;
}
public String getPrefFile() {
return mPrefFile;
}
public float getBalance() {
return mBalance;
}
public ArrayList<sE> getHistoryArrayList() {
return mHistory;
}
public void addToHistoryArrayList(String Title, Boolean IsEarning, float Amount) {
mHistory.add(new sE(Title, IsEarning, Amount));
}
//sE stands for Spending/Earning
public class sE {
private String mTitle;
private Boolean mIsEarning;
private float mAmount;
public sE(String Title, Boolean IsEarning, float Amount) {
mTitle = Title;
mIsEarning = IsEarning;
mAmount = Amount;
}
public String getTitle() {
return mTitle;
}
public Boolean getIsEarning() {
return mIsEarning;
}
public float getAmount() {
return mAmount;
}
}
}
但是当尝试将一个 sE 对象添加到历史数组时,它给了我一个错误:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)”
我该如何解决这个问题?感谢您的帮助!
【问题讨论】:
-
mHistory = new ArrayList() 在你可以添加对象之前。
-
当您尝试向其添加新的 sE 对象时,表示 ArrayList 为空。这没有意义,因为您已经在构造函数中初始化了 ArrayList。您确定这是您的完整代码,并且没有更多内容吗? ArrayList 在您的代码中某处变为空。
-
我有一个 BankAccount 对象的数组列表,我使用 gson 和 json 将其保存到 sharedpreferences 中。我加载并写入它并将arraylist保存在一个活动中,然后我想在一个活动中显示银行账户对象,您还可以在其中看到当前银行账户对象的sE(历史)Arraylist。
-
您能否为此提供更多背景信息?当调用
BankAccount.addToHistoryArrayList时,它说mHistory是null。而且我们现在无法真正看到这是怎么可能的。可能正在使用getHistoryArrayList(),然后操纵您的ArrayList。这是我唯一可以看到发生任何奇怪事情的地方,因为变量被声明为private。 -
此外,您发布的有问题的代码不会产生您发布的 NullPointerException。您显然没有显示引发 NPE 的实际代码。
标签: java android arraylist custom-object