【发布时间】:2021-01-15 15:10:38
【问题描述】:
当我收到来自另一台设备的消息时,我的聊天应用程序崩溃了。它是用 android studio 和 firebase 制作的。这是我得到的异常:java.util.ConcurrentModificationException at
for (User user1 : nUsers) {
存在于 readChats() 中:
private void readChats() {
nUsers = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
nUsers.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
User user = dataSnapshot.getValue(User.class);
for (String id : usersList){
if (user.getId().equals(id)) {
if (nUsers.size() != 0) {
for (User user1 : nUsers) {
if (!user.getId().equals(user1.getId()))
nUsers.add(user);
}
} else {
nUsers.add(user);
}
}
}
}
整个代码:
public class ChatsFragment extends Fragment {
private RecyclerView recyclerView;
private userAdapter userAdapter; private List<User> nUsers;
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.chat_list);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager((getContext())));
fuser = FirebaseAuth.getInstance().getCurrentUser();
usersList = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Chats");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
usersList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
Chat chat = dataSnapshot.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; }
private void readChats() {
nUsers = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
nUsers.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
User user = dataSnapshot.getValue(User.class);
for (String id : usersList){
if (user.getId().equals(id)) {
if (nUsers.size() != 0) {
for (User user1 : nUsers) {
if (!user.getId().equals(user1.getId()))
nUsers.add(user);
}
} else {
nUsers.add(user);
}
}
}
}
userAdapter = new userAdapter(getContext(), nUsers);
recyclerView.setAdapter(userAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
}); } }
【问题讨论】:
标签: java android android-studio