如何从与 Firebase 数据库同步的 ArrayList 中删除条目?
Posted
技术标签:
【中文标题】如何从与 Firebase 数据库同步的 ArrayList 中删除条目?【英文标题】:How to remove entry from ArrayList in sync with Firebase Database? 【发布时间】:2019-04-04 14:44:24 【问题描述】:我有一个数据库:
我有一个 ArrayList usersList
类 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),可以,但位置没有被删除。
请帮助我。 如何从 ArrayList 中删除与 Firebase 数据库同步的条目?
【问题讨论】:
你想从数据库中删除用户还是从ArrayList
删除用户?
从用户离线时删除firebase条目,它可以工作。我需要从 arraylist 中删除相同的条目。
删除后您是否尝试使用adapter.notifyDataSetChanged()
?还将breakpoint
放在usersList.remove(i)
上,检查编译器是否会命中breakpoint
是的,我正在尝试。通过调试,我看到该位置没有被删除。
【参考方案1】:
我认为问题的部分原因是: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);
【讨论】:
哦,谢谢,它有效。我做了你建议的同样的事情,在你回答前几秒钟:)以上是关于如何从与 Firebase 数据库同步的 ArrayList 中删除条目?的主要内容,如果未能解决你的问题,请参考以下文章