如何在我的代码中解决ConcurrentModificationException? [英] How to resolve ConcurrentModificationException in my code?

查看:133
本文介绍了如何在我的代码中解决ConcurrentModificationException?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近2个小时以来我一直在尝试解决此异常..我得到了代码抛出异常的行..但没有找到解决方法..请帮助我错误发生@ mUsers.add(用户);//在其他部分

I have tried since last 2 hours to solve this exception..I got the line of code throwing exception.. but didn't find solution..Please help me error occurs @ mUsers.add(user); //in else part

private void readChats()
{

    mUsers = new ArrayList<>();
    databaseReference = FirebaseDatabase.getInstance().getReference("Users");
    databaseReference.addValueEventListener(new ValueEventListener()
    {

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                try {
                    mUsers.clear();

                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        User user = snapshot.getValue(User.class);

                        //displaying 1 user from chat
                        for (String id : usersList) {
                            if (user.getUserId().equals(id)) {
                                if (mUsers.size() != 0) {
                                    for (User user1 : mUsers) {
                                        if (!user.getUserId().equals(user1.getUserId())) {
                                            mUsers.add(user);
                                        }
                                    }
                                } else {
                                        mUsers.add(user);

                                }
                            }
                        }

                    }//end of for

                    userAdapter = new UserAdapter(getContext(), mUsers);
                    recyclerView.setAdapter(userAdapter);

                }
                catch (Exception e)
                {
                    Toast.makeText(getContext(), e.toString(), Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



}//end of readChats
//this is the method

推荐答案

由于您正在编辑相同的 ArrayList ,因此您正在检索数据.因此,它导致在数据访问的同时进行修改的并发.

Because you are editing same ArrayList you are retrieving data. So, its causing concurrency of modification at same time of data access.

尝试编辑复制的数据:

ArrayList<User> tempList = mUsers;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
    User user = snapshot.getValue(User.class);

    //displaying 1 user from chat
    for (String id : usersList) {
        if (user.getUserId().equals(id)) {
            if (mUsers.size() != 0) {
                for (User user1 : mUsers) {
                    if (!user.getUserId().equals(user1.getUserId())) {
                        tempList.add(user);
                    }
                }
            } else {
                tempList.add(user);
            }
        }
    }
}//end of for

//Copy temp list to main list.
mUsers.addAll(tempList);

userAdapter = new UserAdapter(getContext(), mUsers);
recyclerView.setAdapter(userAdapter);

这篇关于如何在我的代码中解决ConcurrentModificationException?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆