Android ArrayList.add()报空指针 已初始化仍报错如何解决
Android开发ArrayList.add空指针崩溃修复
错误现象
崩溃日志核心报错:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference at com.example.testapplication.AddListActivity$4.onDataChange(AddListActivity.java:111)
你已经在AddListActivity类成员位置初始化了ArrayList<Category> categories = new ArrayList<>();,但添加分类时仍然触发上述空指针。
根因分析
问题出在onCreate方法中的这行代码:
categories = intent.getParcelableExtra(MainActivity.KEY_NAME);
你在类成员位置初始化的非空ArrayList引用,被这行代码的返回值直接覆盖了。只要出现以下任意一种情况,getParcelableExtra就会返回null,导致categories变量变成null,后续调用add方法自然触发空指针:
- MainActivity跳转时传入的
categories本身就是null - 两边使用的传值KEY不匹配,没拿到对应Extra
Category类Parcelable接口实现有误,反序列化失败返回null
修复步骤
- 修改Intent取值逻辑,不要直接覆盖已经初始化的categories对象,改为非空判断后追加数据,替换原有取值代码为:
Intent intent = getIntent(); ArrayList<Category> intentCategories = intent.getParcelableExtra(MainActivity.KEY_NAME); if (intentCategories != null) { categories.addAll(intentCategories); }
这种写法能保证categories始终是你初始化的非空实例,既不会被null覆盖,后续滑动删除逻辑里调用categories.get()、categories.remove()也不会触发空指针。
- 校验传值链路:确认MainActivity中跳转前
categories列表已经初始化非空,且MainActivity.KEY_NAME常量值在两个Activity中完全一致,不存在拼写偏差。 - 检查
Category类的Parcelable实现:确认类正确实现了Parcelable接口,包含CREATOR静态实例、writeToParcel方法、对应序列化构造方法,没有字段读写遗漏,避免反序列化返回null。
内容的提问来源于stack exchange,提问作者random1234
相关产品推荐
相关产品推荐

