如何在我的代码中解决ConcurrentModificationException? [英] How to resolve ConcurrentModificationException in my code?
本文介绍了如何在我的代码中解决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屋!
查看全文