Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决我的代码中的ConcurrentModificationException?_Java_Android - Fatal编程技术网

Java 如何解决我的代码中的ConcurrentModificationException?

Java 如何解决我的代码中的ConcurrentModificationException?,java,android,Java,Android,从过去两个小时以来,我一直试图解决这个异常。我得到了引发异常的代码行。。但是没有找到解决办法请帮帮我 错误发生在@mUsers.add(用户)//在其他部分 private void readChats() { mUsers = new ArrayList<>(); databaseReference = FirebaseDatabase.getInstance().getReference("Users"); databaseReference.addVa

从过去两个小时以来,我一直试图解决这个异常。我得到了引发异常的代码行。。但是没有找到解决办法请帮帮我 错误发生在@mUsers.add(用户)//在其他部分

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
private void readChats()
{
mUsers=newarraylist();
databaseReference=FirebaseDatabase.getInstance().getReference(“用户”);
databaseReference.addValueEventListener(新的ValueEventListener()
{
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
试一试{
mUsers.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshot.getValue(User.class);
//显示来自聊天室的1个用户
for(字符串id:usersList){
if(user.getUserId().equals(id)){
如果(mUsers.size()!=0){
for(用户1:mUsers){
如果(!user.getUserId().equals(user1.getUserId())){
添加(用户);
}
}
}否则{
添加(用户);
}
}
}
}//结束
userAdapter=newuseradapter(getContext(),mUsers);
recyclerView.setAdapter(userAdapter);
}
捕获(例外e)
{
Toast.makeText(getContext(),e.toString(),Toast.LENGTH_SHORT).show();
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}//阅读聊天结束
//这就是方法

因为您正在编辑与检索数据相同的
ArrayList
。因此,它在数据访问的同时导致修改的并发性

尝试编辑复制的数据:

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);
arraylisttemplast=mUsers;
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshot.getValue(User.class);
//显示来自聊天室的1个用户
for(字符串id:usersList){
if(user.getUserId().equals(id)){
如果(mUsers.size()!=0){
for(用户1:mUsers){
如果(!user.getUserId().equals(user1.getUserId())){
添加(用户);
}
}
}否则{
添加(用户);
}
}
}
}//结束
//将临时列表复制到主列表。
穆塞斯·阿德尔(圣殿骑士);
userAdapter=newuseradapter(getContext(),mUsers);
recyclerView.setAdapter(userAdapter);

在for-each循环中对容器(ArrayList)进行迭代时,不应修改该容器。要么将其转换为基于索引的for循环,要么创建一个新的ArrayList,在其中存储计划的修改,并在循环结束后进行这些修改。否,先生..显示相同的错误。。但我用并发哈希映射解决了。。tnx用于ur响应