java - 从 Firebase 数据库读取数据时,如何知道访问的每个查询结果?

标签 java android firebase asynchronous firebase-realtime-database

我有一个 Android 项目,其数据库位于 Firebase 上。在某些时候,我需要获取所有年龄等于某个给定年龄的人的姓名。所以这是我的代码:

    peopleRef.orderByChild("age").equalTo(age).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            String name = dataSnapshot.child("name").getValue().toString();
            nameArray.add(name);
            //showNames();

        }

        @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) {

        }

    });

将名称放入数组后,我需要在另一个名为 showNames() 的函数中使用此数组。但是由于 Firebase 数据库的异步特性,我无法访问 onChildAdded 之外的数组。问题是,当所有名称都添加到数组时,我只需要调用一次 showNames() 。我如何才能知道查询何时访问了所有人并完成向数组中添加姓名,以便调用 showNames()?

最佳答案

您可以改用 ValueEventListener 并遍历子项,将它们添加到数组中:

peopleRef.orderByChild("age").equalTo(age).addValueEventListener(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for(DataSnapshot dataSnapshot : snapshot.getChildren())
            {
                String name = dataSnapshot.child("name").getValue().toString();
                nameArray.add(name);
            }
            showNames();
        }
});

关于java - 从 Firebase 数据库读取数据时,如何知道访问的每个查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971916/

相关文章:

java - 如何从 clojure 项目在 eclipse 中使用 java 项目

android - 当我从另一个 fragment 返回到它时,如何使 fragment 与我离开它时的方式完全相同?

firebase - 用于管理客户端 API key 的正确 Firestore 架构是什么?

javascript - 动态加载 firebase 模块? (v9)

ios - 从应用程序注销后如何取消订阅 FCM 通知?

Java:WAITINGActionEvent

java - 这种模式的正则表达式是什么?

java - Spring @Transactional 和继承

android - 当我们在任何 Activity 中单击主页时,关闭整个应用程序将关闭

android - GregorianCalendar/Calendar 和设置 HOUR 字段奇数