Android应用向Training类的ArrayList<Exercise>添加对象时崩溃求助
问题根因
你遇到的崩溃为空指针异常(NullPointerException),核心原因是你仅在Training类中声明了ArrayList<Exercise>类型的exercises成员变量,但没有对该变量做初始化操作。此时你创建的randomTraining实例中,exercises属性默认值为null,调用null.add()方法就会直接触发崩溃。
修复方案
你可以任选以下任意一种方式修复:
- 方案1:在
Training类声明成员变量时直接完成初始化
public class Training { public Integer trainingNumber; public Date datum; public Integer nrOfExercises; // 声明时直接初始化列表,避免空指针 public ArrayList<Exercise> exercises = new ArrayList<>(); }
- 方案2:在
createRandomTraining方法中,往列表添加元素前先初始化列表
在randomTraining.datum = new Date(2021,m,d);这行代码之后,for循环开始之前,添加初始化代码即可:
randomTraining.datum = new Date(2021,m,d); // 新增初始化列表的代码 randomTraining.exercises = new ArrayList<>(); for (int j = 0; j < amountOfExercises ; j ++){ // 原有循环逻辑保持不变 }
可选优化建议
- 不需要在循环中重复创建
Random r = new Random()实例,全局复用方法开头创建的random实例即可,减少不必要的对象创建开销 - 你用到的
Date(int year, int month, int day)构造方法已被标记为过时,若有规范要求可替换为LocalDate相关API实现日期赋值
内容的提问来源于stack exchange,提问作者P3st1l3nc3101
相关产品推荐
相关产品推荐

