You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:36:18