我有一个数据库:
我有一个类usersList
的ArrayList UsersOnlineClass
:
public class UsersOnlineClass {
private String muserName;
public UsersOnlineClass(String userName) {
muserName = userName;
}
public String getmuserName() {
return muserName;
}
}
我有一个用于将用户在线时将其添加到
usersList
的代码:onlineViewersCountRef.addChildEventListener(new ChildEventListener() {
ArrayList<UsersOnlineClass> usersList = new ArrayList<>();
UsersOnlineAdapter usersAdapter = new UsersOnlineAdapter(Chat.this, usersList);
ListView lv = findViewById(R.id.usersList);
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
usersList.add(new UsersOnlineClass(dataSnapshot.getValue().toString()));
lv.setAdapter(usersAdapter);
Toast.makeText(Chat.this, String.valueOf(usersList.size()), Toast.LENGTH_SHORT).show();
}
可以。
但是我不知道离线时如何从
usersList
中删除用户。我尝试了这段代码: public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
String deletedUser = dataSnapshot.getValue().toString();
int i;
for (i = 0; i < usersList.size(); i++) {
if (usersList.get(i).equals(deletedUser)) {
usersList.remove(i);
}
}
但这不起作用,该位置不会从
usersList
中删除。字符串deletedUser
等于usersList
中的位置之一(例如Micle),可以,但是位置未删除。请帮我。如何与Firebase数据库同步从ArrayList中删除条目?
最佳答案
我认为问题部分在于:usersList.get(i).equals(deletedUser)
-这将返回一个要与String
比较的对象,因此if
语句中的代码块将永远不会执行,因为equals
失败。因此,您需要比较相同type
的两个(自定义)对象,或者可以将String
与String
进行比较:
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
UsersOnlineClass deletedUser = dataSnapshot.getValue(UsersOnlineClass.class);
for (int i = 0; i < usersList.size(); i++) {
if (usersList.get(i).getmuserName().equals(deletedUser.getmuserName())) {
usersList.remove(i);
}
}