Android ConcurrentModificationException在recyclerView中显示聊天时
我通过firebase以片段的形式显示聊天,但它给出了ConcurrentModificationException错误 下面是发生错误的代码 代码:Android ConcurrentModificationException在recyclerView中显示聊天时,android,firebase,exception,Android,Firebase,Exception,我通过firebase以片段的形式显示聊天,但它给出了ConcurrentModificationException错误 下面是发生错误的代码 代码: public void readChats(){ mUsers=newarraylist(); reference=FirebaseDatabase.getInstance().getReference(“用户”); addValueEventListener(新的ValueEventListener(){ @凌驾 public void on
public void readChats(){
mUsers=newarraylist();
reference=FirebaseDatabase.getInstance().getReference(“用户”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
mUsers.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
User=snapshots.getValue(User.class);
for(字符串id:usersList){
if(user.getID().equals(id)){
如果(mUsers.size()!=0){
for(用户1:mUsers){
如果(!user.getID().equals(user1.getID())){
添加(用户);
}
}
}否则{
添加(用户);
}
}
}
}
userAdapter=新适配器(getContext(),mUsers);
recyclerView.setAdapter(userAdapter);
}
如果通过迭代器(如for(var:Collection)循环)在集合上循环,则不能在循环过程中更改该集合。这样做是ConcurrentModification,并使迭代器无效
此外,您的代码将被中断。如果MUSER中的最后一个项不是UsR1,即使允许同时修改也将是无限循环。
它不能出现在光标所在的地方。如果您在某个时间点考虑使用该行,可以在这里找到一个教程,说明如何创建一个完整的函数。奥纳尔。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);
}