【问题标题】:ConcurrentModificationException java.util.ArrayList$Itr.next [duplicate]ConcurrentModificationException java.util.ArrayList$Itr.next [重复]
【发布时间】:2019-12-26 18:55:05
【问题描述】:

我可以实现一个聊天应用程序,仅向用户显示聊天,可以获取要发送的 user_id 或接收要存储在用户列表中的消息,并选择要添加到列表中的用户一些错误,例如用户列表如果添加用户 1 并添加用户 2 时再次添加用户 1 ArrayList 中的异常

 for (String id : usersList)
                    if (equal(user.getId(), id)) {
                        if (mUseres.size() != 0) {
                            for (User user1 : mUseres) {
                                if (!equal(user.getId(), user1.getId())) {
                                    mUseres.add(user);
                                }
                            }
                        } else {
                            mUseres.add(user);
                        }

【问题讨论】:

    标签: java android arraylist firebase-realtime-database


    【解决方案1】:

    问题就在这里:

       for (User user1 : mUseres) {
           if (!equal(user.getId(), user1.getId())) {
           mUseres.add(user);
        }
    

    您正在迭代 mUseres (for....) 并且同时您正在添加新项目 (mUseres.add)

    【讨论】:

      【解决方案2】:

      您不能在迭代列表时修改它。

      来自docs

      请注意,此异常并不总是表示对象已被不同的线程同时修改。如果单个线程发出一系列违反对象约定的方法调用,则该对象可能会抛出此异常。例如,如果线程在使用快速失败迭代器迭代集合时直接修改集合,则迭代器将抛出此异常

      【讨论】:

        猜你喜欢
        • 2021-09-06
        • 2020-09-25
        • 2021-07-01
        • 1970-01-01
        • 2017-06-07
        • 2016-12-23
        • 2011-03-12
        • 1970-01-01
        • 2013-06-04
        相关资源
        最近更新 更多