java - 每个 android 的 ConcurrentModificationException

标签 java android list concurrentmodification

我传递ParseObjectArraylist,然后我放置一个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/

    相关文章:

    java - 如何替换/删除数组 exp 的求值?

    java - 传承与类型转换设计

    java - 无法找出下面代码中的运行时错误

    java - 反编译APK,修改Activity并重新编译为APK

    Android SQLite插入多条记录

    html - 尝试在无序列表中 float div

    string - 混合(字符和数字)变量的逻辑查询

    java - 适用于 Android 的 Google map - 多段线崩溃应用

    android - fragment YouTubePlayerSupportFragment 中的重复 ID

    c++ - 在运行时从列表中添加和删除