这不是问题所在。
D / AndroidRuntime:关闭VM ---------崩溃的开始 java.lang.IndexOutOfBoundsException:索引3无效,大小为3
ArrayList<String> list= new ArrayList<String>();
for (i = 0 ; i < list.size(); i++){
list.add(adapter.getItem(i).getName());
Log.e("Info", "Position: " + i + " Content: " + list.get(i) + " SIZE: " + list.size());
}
切换到每个人都给我的解决方案,现在永远不会进入周期
W / AudioTrack:客户拒绝了AUDIO_OUTPUT_FLAG_FAST
IApplicationRuntime
答案 0 :(得分:2)
您所看到的例外情况非常明确:
java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3
意味着您使用的索引对于您拥有的容器来说太大了。
在您的特定情况下,这是因为此代码(略有释义):
ArrayList<String> list= new ArrayList<String>();
for (i = 0 ; i <= list.size(); i++)
list.add(adapter.getItem(i).getName());
这样做只要i
小于或等于列表大小,就会继续向列表添加项目。但是,总是是真的,因为列表大小的增长速度与i
相同 - 当i
变为1时,大小也是如此。等等无限期(无论如何,直到你获得例外的地步)。
但是,您从中获取数据的是而不是列表,它是适配器。这意味着,只要i
增加到等于适配器中的项目数的值, adapter.getItem(i)
就会失败并显示您遇到的异常。
修复是使用适配器大小来控制循环,因为它决定了需要添加多少东西:
ArrayList<String> list= new ArrayList<String>();
for (i = 0 ; i < adapter.getCount(); i++) // NOT list.size()
list.add(adapter.getItem(i).getName());
注意我还将<=
更改为<
,因为从零开始的集合的项目范围是0..(size-1)
,而不是0..size
。
答案 1 :(得分:1)
数组索引从0
枚举,因此当数组为3
元素时,您不能拥有索引3
,因此您在此行中的条件错误:
for (i = 0 ; i <= list.size(); i++){
答案 2 :(得分:1)
更改for循环条件for(i=0;i<list.size();i++)