我有一个数据库:

java - 如何与Firebase数据库同步从ArrayList中删除条目?-LMLPHP

我有一个类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的两个(自定义)对象,或者可以将StringString进行比较:

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);
            }
        }

10-07 18:17