【发布时间】:2016-01-17 08:12:28
【问题描述】:
这不可能是这里的问题。
D/AndroidRuntime: 关闭虚拟机 --------- 崩溃开始 java.lang.IndexOutOfBoundsException:索引 3 无效,大小为 3
private void setupContButton(){
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayList<String> list= new ArrayList<String>();
Log.e("SIZE LIST", "list: " + list.size());
for (i = 0 ; i <= list.size(); i++){
list.add(adapter.getItem(i).getName());
Log.e("Info", "Position: " + 1 + " Content: " + list.get(i) + " SIZE: " + list.size());
}
}
});}
切换到大家给我的解决方案,现在再也没有进入循环
W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝
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());
}
【问题讨论】:
-
异常告诉你确切的问题。您试图从只有索引 0、1、2 的数组中获取索引 3。我可以从这里看到问题(提示:修复您的 for 循环)。
-
将
for (i = 0 ; i <= list.size(); i++){更改为for (i = 0 ; i < list.size(); i++){ -
user2747599
List用于索引,java中的索引以0开头,因此如果size()返回3,那么它只包含索引0,1 and 2处的元素.因此,在访问3的元素时,会抛出java.lang.IndexOutOfBoundsException。 -
@StackOverflowerrr:实际上,我一开始也是这么想的。但是,这与列表大小无关,因为列表最初是空的(大小 == 0)。问题是根据我的(更新的)答案,错误的东西被用来控制循环。它应该由适配器大小而不是列表来控制。
标签: android listview arraylist listadapter