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
相关产品推荐
相关产品推荐

