数组错误异常,如何填充ArrayList?

时间:2015-10-19 04:31:07

标签: android listview arraylist listadapter

这不是问题所在。

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

3 个答案:

答案 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++)