ConcurrentModificationException при отображении чатов в recyclerView - PullRequest
0 голосов
/ 30 октября 2019

Я показываю чаты во фрагменте через firebase, но это дает ошибку ConcurrentModificationException.

LOGCAT ERROR

Ниже приведен код, в котором происходит ошибка.

КОД:

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);
        }

Code picture where error is occuring

1 Ответ

1 голос
/ 30 октября 2019

Если вы перебираете коллекцию через ее итератор (как в цикле for (var: collection)), вы не можете изменить эту коллекцию, пока вы это делаете. Это делает ConcurrentModification и делает итератор недействительным.

Кроме того, ваш код в любом случае будет нарушен. Если последний элемент в mUsers не user1, он будет бесконечным циклом, даже если разрешены одновременные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...