【问题标题】:How to retrieve a List from Firebase avoid asynchronous如何从 Firebase 检索列表避免异步
【发布时间】:2018-07-26 00:03:26
【问题描述】:

我知道当我们从 Firebase 检索数据时,它将是异步的,所以通常我会将所有代码放在 addChildEventListener 中,例如我想在下面对 userList 进行排序。但我很困惑,如果列表真的很大,比如百万用户,那么这意味着方法sortUser(user) 将被调用百万次吗?谁能给我解释一下,我是firebase的新手

myRef.child("User").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            User user= dataSnapshot.getValue(User.class);
            userList.add(user);
            sortUser(userList);
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

【问题讨论】:

  • 你能发布 sortuser 方法的作用吗?
  • 它只是比较用户名
  • 你能发布那个代码吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

您当前使用ChildEventListener,这意味着您的onChildAdded 会立即为每个子节点调用,然后在添加新子节点时稍后调用。这确实可以是很多调用。

如果您使用ValueEventListener,它的onDataChange 将只为初始数据调用一次(无论有多少子节点),然后每次更改一次。

通过将ValueEventListener 添加到您当前的设置中,您可以让事情变得简单:像您已经在做的那样将子节点添加到 lit,但只在onDataChange 中排序。

myRef.child("User").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      sortUser(userList);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
};

Firebase 只会同步一次 User 节点的数据,即使您有两个侦听器也是如此。

【讨论】:

  • 谢谢,我明白了
【解决方案2】:

您可能应该使用order-by methods 检索服务器端排序的数据,然后收听那个。

var userRef = firebase.database().ref('posts').orderByChild('Users');

如果我猜对了,你不需要单独的排序客户端。

您还可以过滤数据。请参考docs

【讨论】:

  • 在我的情况下,我需要将服务器上的每个用户与我的应用程序中的用户登录进行比较:(
猜你喜欢
  • 2021-03-27
  • 2017-01-11
  • 2018-05-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多