我传递ParseObject
的Arraylist
,然后我放置一个foreach
循环来提取用户对象时具有条件的项目不等于空。我面临两个问题。
1. 如果我通过将不同的数据传递到另一个列表,然后在我的适配器中传递该列表来执行以下代码行,我将获得带有数字的随机数据,例如:如果在项目#1上名称是“MAC”,那么它显示在第 3 项中。
ArrayList<ParseObject> checkRequestedNetArrayList = new ArrayList<ParseObject>();
requestedNetArrayList = (ArrayList<ParseObject>) objects;
MyResponsibilitesActivity.requestedNetArrayList = requestedNetArrayList;
adapterRequest = new GenericAdapter<ParseObject>(
getApplicationContext(),
requestedNetArrayList,
R.layout.requested_trust_net_list_item,
requestedDataBinder);
requestListView.setAdapter(adapterRequest);
requestedNetArrayList = (ArrayList<ParseObject>) objects;
for(ParseObject object: objects){
System.out.println(object);
object.getParseObject("user");
if(object.has("user")){
checkRequestedNetArrayList.add(object);
}else{
checkRequestedNetArrayList.remove(object);
}
}
adapterRequest = new GenericAdapter<ParseObject>(
getApplicationContext(),
checkRequestedNetArrayList,
R.layout.requested_trust_net_list_item,
requestedDataBinder);
requestListView.setAdapter(adapterRequest);
如果我执行以下代码行只是直接给出同一列表中的项目,我将收到
java.util.ConcurrentModificationException
for(ParseObject object: objects){ if(object.has("user")){ requestedNetArrayList.add(object); } } else{ requestedNetArrayList.remove(object); } adapterRequest = new GenericAdapter<ParseObject>( getApplicationContext(), requestedNetArrayList, R.layout.requested_trust_net_list_item, requestedDataBinder); requestListView.setAdapter(adapterRequest);
}
请帮帮我。
最佳答案
访问列表中的元素时无法将其删除。 您必须使用迭代器。
无论您在何处删除对象,请使用 it.remove();
Iterator<ParseObject> it = objects.iterator();
while(it.hasNext()){
Object object = it.next();
//your stuff
it.remove();
}
我想您可能想查看这篇关于 deep copy 的文章还有。
更新
由于您想将元素添加到列表中,因此不能直接使用迭代器。现在您面临问题,因为您直接将 objects
分配给 requestedNetArrayList
而不是按以下方式执行:
ArrayList<ParseObject> requestedNetArrayList = new ArrayList<>(objects);
然后像现在一样迭代对象
,并从中删除或添加到
requestedNetArrayList
(您几乎已经在这样做了)。
关于java - 每个 android 的 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31221356/