Android 如何从Firebase检索列表避免异步

Android 如何从Firebase检索列表避免异步,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我知道当我们从Firebase检索数据时,它是异步的,所以通常我会将所有代码放在addChildEventListener中,就像下面我想排序userList的示例一样。但我很困惑,如果列表真的很大,比如百万用户,那么这意味着方法sortUser(user)将被调用一百万次?谁能给我解释一下,我是firebase的新手 myRef.child("User").addChildEventListener(new ChildEventListener() { @Override

我知道当我们从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) {

        }
    });

您可能应该通过使用检索服务器端排序的数据,然后听那个

var userRef = firebase.database().ref('posts').orderByChild('Users');
如果我猜对了,您将不需要单独的排序客户端


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

您可能应该使用检索服务器端排序的数据,然后收听该音频

var userRef = firebase.database().ref('posts').orderByChild('Users');
如果我猜对了,您将不需要单独的排序客户端


您还可以过滤数据。请务必参考当前使用的
ChildEventListener
,这意味着您的
onchildaded
会立即为每个子节点调用,然后在添加新子节点时调用。这确实可以是很多调用

如果使用
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只会同步
用户
节点的数据一次,即使您有两个侦听器。

您当前使用的是
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只会同步
用户
节点的数据一次,即使你有两个监听器。

你能发布sortuser方法的功能吗?它只是比较用户的姓名,你能发布代码吗?你能发布sortuser方法的功能吗?它只是比较用户的姓名,你能发布代码吗?在我的情况下,我需要比较服务器上的每个用户与我应用程序中的用户登录名:(在我的例子中,我需要将服务器上的每个用户与我应用程序中的用户登录进行比较:(谢谢,我知道了谢谢,我知道了