din*_*707 7 java android exception-handling arraylist
我试图从ArrayList中删除项目.有时它会弹出一个异常,"java.util.ConcurrentModificationException".
首先我尝试通过array_list_name.remove(i)删除它们,但它失败了,有些人被要求使用Iterator.所以我目前的代码如下.
for (Iterator<Collectable> iter = array_list_name.iterator(); iter.hasNext();) {
Collectable s = iter.next();
if (s.equals(array_list_name.get(id))){
iter.remove();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我在视图中的onDraw()函数中调用"array_list_name".我的观点是SurfaceView.任何人都可以建议我如何从ArrayList中删除项目而不会收到此错误.
从注释中可以看出,您ArrayList<Collectable>可以onDraw()通过UI 从一个线程中的方法访问,同时在另一个线程中从中删除项目.
那么,为什么不将两个访问器包装在一个
synchronized(array_list_name)
{
// UI access code or item removal code
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果删除项目需要很长时间,这可能会使您的UI滞后.如果是这种情况,请考虑列出要删除的所有项索引,并在迭代整个列表后在紧密同步循环中删除它们.
更新
在我看来,您的整个代码段可以简化为:
synchronized(array_list_name)
return array_list_name.remove(id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12971 次 |
| 最近记录: |