Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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/3/android/232.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
for循环中的java.util.ConcurrentModificationException错误_Java_Android_Android Studio - Fatal编程技术网

for循环中的java.util.ConcurrentModificationException错误

for循环中的java.util.ConcurrentModificationException错误,java,android,android-studio,Java,Android,Android Studio,当我构建我的项目时,没有出现错误,但当应用程序启动时,它崩溃了,并在for循环[for(User user1:mUsers)]的第97行中给出了该错误 错误是:致命异常:主进程:com.example.chatapp,PID:9908 java.util.ConcurrentModificationException 我不明白这个错误以及为什么会出现这个错误 这是我的密码: private UserAdapter userAdapter; private List<User> mUs

当我构建我的项目时,没有出现错误,但当应用程序启动时,它崩溃了,并在for循环[for(User user1:mUsers)]的第97行中给出了该错误 错误是:致命异常:主进程:com.example.chatapp,PID:9908 java.util.ConcurrentModificationException

我不明白这个错误以及为什么会出现这个错误

这是我的密码:

private UserAdapter userAdapter;
private List<User> mUsers;
FirebaseUser fuser;
DatabaseReference reference;
private List<String>usersList;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_chats, container, false);

    recyclerView = view.findViewById(R.id.recycle_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    fuser = FirebaseAuth.getInstance().getCurrentUser();

    usersList = new ArrayList<>();

    reference = FirebaseDatabase.getInstance().getReference("Chat");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            usersList.clear();

            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                Chat chat = snapshot.getValue(Chat.class);

                assert chat != null;
                if (chat.getSender().equals(fuser.getUid())){
                    usersList.add(chat.getReceiver());
                }
                if (chat.getReceiver().equals(fuser.getUid())){
                    usersList.add(chat.getSender());
                }
            }
            readChats();

        }

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

        }
    });

    return view;
}

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 snapshot : dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);

                // display user from chats
                for (String id : usersList){

                    if (user.getId().equals(id)){
                        if (mUsers.size() != 0){
                            for (User user1 : mUsers){   // error here
                                if (!user.getId().equals(user1.getId())){
                                    mUsers.add(user);
                                }
                            }
                        }else {
                            mUsers.add(user);
                        }
                    }
                }
            }

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

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

        }
    });
}
private-UserAdapter-UserAdapter;
私人博物馆名单;
FirebaseUser定影器;
数据库参考;
私有列表用户列表;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u chats,container,false);
recyclerView=view.findViewById(R.id.recycle\u视图);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getContext());
fuser=FirebaseAuth.getInstance().getCurrentUser();
usersList=newarraylist();
reference=FirebaseDatabase.getInstance().getReference(“聊天”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
usersList.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Chat Chat=snapshot.getValue(Chat.class);
断言聊天!=null;
if(chat.getSender().equals(fuser.getUid())){
添加(chat.getReceiver());
}
if(chat.getReceiver().equals(fuser.getUid())){
usersList.add(chat.getSender());
}
}
readChats();
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
返回视图;
}
公共无效阅读聊天室(){
mUsers=newarraylist();
reference=FirebaseDatabase.getInstance().getReference(“用户”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
mUsers.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshot.getValue(User.class);
//显示聊天记录中的用户
for(字符串id:usersList){
if(user.getId().equals(id)){
如果(mUsers.size()!=0){
对于(用户user1:mUsers){//error here
如果(!user.getId().equals(user1.getId())){
添加(用户);
}
}
}否则{
添加(用户);
}
}
}
}
userAdapter=newuseradapter(getContext(),mUsers);
recyclerView.setAdapter(userAdapter);
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
}

此处:

for (User user1 : mUsers){   // error here
        if (!user.getId().equals(user1.getId())){
            mUsers.add(user);
        }
}
在集合中添加元素,同时使用迭代器对其进行迭代。这是不允许的。 请注意,编译后为(用户user1:mUsers)使用的
增强for
循环表示为一个

要克服这一限制,您可以使用一个(重点是我的):

用于列表的迭代器,允许程序员遍历列表 在任一方向上,在迭代过程中修改列表,并获得 迭代器在列表中的当前位置

ListIterator listIteratorUser=mUsers.ListIterator();
而(listIteratorUser.hasNext()){
User user1=listIteratorUser.next();
如果(!user.getId().equals(user1.getId())){
添加(用户);
}
}

太好了,可以了,谢谢:)
ListIterator<User> listIteratorUser = mUsers.listIterator();
while(listIteratorUser.hasNext()){   
      User user1 = listIteratorUser.next();
      if (!user.getId().equals(user1.getId())){
          listIteratorUser.add(user);
      }
  }