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

Android中ArrayList填充后获取元素空指针及getFolderSize()报错求解

问题根因拆解

1. 初始代码的索引越界错误

你最开始写的competitors.set(0,players)属于API用法错误:

ArrayList的set(int index, E element)方法作用是替换已存在索引位置的元素,要求传入的index必须小于当前List的size。你刚new完新的ArrayList时size是0,直接调用set(0,xxx)自然会抛出日志里的IndexOutOfBoundsException: Index: 0, Size: 0异常。

正确的元素添加方法应该用competitors.add(players)按顺序追加元素到列表末尾,若需要指定位置插入可以用competitors.add(0, players)。

2. getFolderSize相关空指针的说明

你看到的E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException这类报错,和你写的业务代码完全无关,这是部分小米/红米设备的系统层面Bug,属于ROM内置的性能统计模块的异常,和你的APP逻辑、存储权限都没有关联,不会导致你的APP崩溃,也不影响正常的代码逻辑执行,直接忽略即可。

3. 调试确认size为4依旧报错的排查方案

  • 先确认改用add方法后的代码写法是否正确,参考写法:
competitors = new ArrayList<>();
competitors.add(players);
competitors.add(players1);
competitors.add(players2);
competitors.add(players3);
  • 排查是否在其他位置有清空、修改competitors列表的代码,导致你取元素时列表被改动。
  • 给Log打印逻辑加非空判断,避免偶发空指针,同时过滤你自己定义的Log标签players names,不要被系统的Perf错误日志干扰执行结果判断:
if(competitors.size() > 1 && competitors.get(1) != null){
    Log.i("players names", competitors.get(1).getName());
}

正常情况下按上述写法调整后,你可以正常在日志中看到打印出来的Julian名称。

内容的提问来源于stack exchange,提问作者Agustín Rabini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:03