基本上我有一个过滤功能,用户可以从下拉微调器中选择并选择回收器视图刷新。
但是,即使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)
答案 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++;
}