java - 用户数组列表中的并发修改异常
问题描述
我已完成此代码以显示与登录用户聊天的每个用户。这段代码给了我一个 ConcurrentModificationException 错误。当我回复消息时会发生这种情况。
我使用数组列表来存储从 firebase 检索到的数据。错误导致“ for (User user1 : users) { ”的代码行。如何解决这个问题。
private void readChats() {
users = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
users.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
// Display each user from the chats
for (String id : usersList) {
if (user.getId().equals(id)) {
if (users.size() != 0) {
for (User user1 : users) { // getting error
if (!user.getId().equals(user1.getId())){
users.add(user);
}
}
} else {
users.add(user);
}
}
}
}
usersAdapter= new UsersAdapter(getContext(), users);
recyclerView.setAdapter(usersAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
这给出了以下错误消息。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dasun96.vreyedoctor, PID: 20759
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at com.dasun96.vreyedoctor.ChatsFragment$2.onDataChange(ChatsFragment.java:93)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source:13)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
解决方案
你可以试试users = new CopyOnWriteArrayList<>();
代替users = new ArrayList<>();
吗?
ArrayLists
快速失败,这意味着当您尝试执行非法操作时它们会抛出异常。非法操作的一个示例可能是ArrayList
通过它(没有迭代器)从 while 迭代中添加/删除。
长话短说,使用 aCopyOnWriteArrayList
你就不会再头疼了。
推荐阅读
- angular6 - 在 Angular 6 中扩展原生 HTML 元素
- python - MQTT 连接在 Screen 会话中不起作用
- python - 为什么 mypython 类未定义?
- html - 在 DIV 中居中两个 SVG
- amazon-web-services - 如何在 AWS 应用程序负载均衡器访问日志和云端访问日志中指定查询参数值
- ruby-on-rails-5 - 达到油门极限。稍后重试
- database - 如何将测试数据存储到 nosql 文档数据库中以便快速读取?
- google-maps - 如何使用量角器从自动填充的谷歌地图下拉列表中进行选择?
- sql - 要插入的存储过程不起作用:将数据类型 nvarchar 转换为数字时出错
- python-3.x - Google Cloud Speech 错误 - IndexError:列表索引超出范围