Android应用程序崩溃,因为索引超出范围 - 即使列表存在

时间:2016-03-17 13:02:03

标签: java android arraylist indexoutofboundsexception

基本上我有一个过滤功能,用户可以从下拉微调器中选择并选择回收器视图刷新。

但是,即使ArrayList存在,我的应用程序也会崩溃。这是我的代码......

System.out.println("Original list size: " + list.size());
System.out.println("Duplicate list size: " + dupList.size());
// BOTH PRINT 7, AS dupList is a copy of list

for(int i=0; i<dupList.size();){
    if(!dupList.get(i).getName().equals(name)){
        //CRASHES HERE
        list.remove(i);
    }
    else {
        i++;
    }
}

该应用程序崩溃了以下内容:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
                                                     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                     at java.util.ArrayList.remove(ArrayList.java:403)
                                                     at benzo.ShowAllGUI.filterUsers(ShowAllGUI.java:150)

2 个答案:

答案 0 :(得分:0)

出于某种原因,您从原始列表的副本开始,对其进行迭代,然后从原始列表中删除元素(如果它们不等于某些name)。你甚至需要dupList吗?

尝试从空列表开始,只添加您想要的元素:

List<SomeObject> resultList = new ArrayList<>();
for(int i=0; i<list.size();i++){
  if(list.get(i).getName().equals(name)){
    resultList.add(list.get(i));
  }
}

resultList现在只包含您想要的值,基于相同的过滤器。

答案 1 :(得分:-2)

更改为

for(int i=0; i<dupList.size();){
    if(!dupList.get(i).getName().equals(name)){
        //CRASHES HERE
        list.remove(i);
    }
    else {

    }

    i++;
}
相关问题