【问题标题】:ConcurrentModificationException while displaying chats in recyclerView在 recyclerView 中显示聊天时出现 ConcurrentModificationException
【发布时间】:2020-02-25 08:51:56
【问题描述】:

我正在通过 firebase 在片段中显示聊天,但它给出了 ConcurrentModificationException 错误。

下面是发生错误的代码。

代码:

public void readChats() {
    mUsers = new ArrayList<>();
    reference = FirebaseDatabase.getInstance().getReference("Users");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mUsers.clear();
            for (DataSnapshot snapshots: dataSnapshot.getChildren()) {
                User user = snapshots.getValue(User.class);
                for (String id :usersList) {
                    if (user.getID().equals(id)) {
                        if (mUsers.size()!=0) {
                            for (User user1 : mUsers) {
                                if (!user.getID().equals(user1.getID())) {
                                    mUsers.add(user);
                                }
                            }
                        } else {
                            mUsers.add(user);
                        }
                    }
                }
            }
            userAdapter = new adapter(getContext(), mUsers);
            recyclerView.setAdapter(userAdapter);
        }

【问题讨论】:

  • 不能出现在光标所在的地方。显示线
  • 如果您考虑在某个时间点尝试使用Cloud Firestore,您可以在此处找到有关如何创建完整且实用的Firestore Chat App 的教程。

标签: android firebase exception


【解决方案1】:

如果你通过它的迭代器循环一个集合(比如在一个 for(var : collection) 循环中),你不能在这样做的时候改变那个集合。这样做是一个 ConcurrentModification,并使迭代器无效。

此外,您的代码无论如何都会被破坏。如果 mUsers 中最后一项不是 user1,即使允许并发修改也会无限循环。

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2014-07-09
    • 1970-01-01
    • 2018-08-31
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多