android - 如何在firebase数据库中获取所有 child 的数据?

标签 android firebase firebase-realtime-database

我有这个 firebase 数据库

enter image description here

并且我需要获取用户的所有电话号码,我应该使用哪个监听器来获取所有 child ?

每个用户都被添加为一个对象,用户 ID 作为该对象的名称,我需要在不知道该用户 ID 的情况下检索这些对象

我搜索了文档,它与 DataSnapshot 相关,但没有监听器我无法获得 DataSnapshot !寻求 DataSnapshout 是正确的还是我应该使用其他东西

最佳答案

首先检索您的用户数据快照。

//Get datasnapshot at your "users" root node
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");
    ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    //Get map of users in datasnapshot
                    collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue());
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    //handle databaseError
                }
            });

然后遍历用户,访问他们的 map 并收集电话字段。

private void collectPhoneNumbers(Map<String,Object> users) {

    ArrayList<Long> phoneNumbers = new ArrayList<>();

    //iterate through each user, ignoring their UID
    for (Map.Entry<String, Object> entry : users.entrySet()){

        //Get user map
        Map singleUser = (Map) entry.getValue();
        //Get phone field and append to list
        phoneNumbers.add((Long) singleUser.get("phone"));
    }

    System.out.println(phoneNumbers.toString());
}

此监听器仅在显式调用时才会检索数据快照。除了您的用户节点之外,考虑在“allPhoneNumbers”节点下存储一个号码列表。这将使您的数据快照在收集所有数字时更轻松、更容易处理。如果您说有数百个用户,“用户”数据快照会太大,而“allPhoneNumbers”列表的效率会高得多。

上面的代码已经在您的示例数据库上进行了测试,并且确实有效。但是,您的电话字段可能需要转换为 String 或 int,具体取决于您用户的电话实例字段的类型。

关于android - 如何在firebase数据库中获取所有 child 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38965731/

相关文章:

java - 没有附加适配器,在 fragment 中使用 reyclerview 和 json 跳过布局

Android firebase auth 同步登录

ios - 使用注释坐标删除注释

javascript - 我如何绕过 firebase 在响应时给出的数组中的随机 id?

ios - 在 iOS 上使用基于时间的 key 更新 firebase 数据库

android - Firebase set value 重写 children- Android

java - 如何在 onClickListener 中获取点击位置?

android - Firebase 身份验证超时

android - 无法弹出导航库的返回堆栈

javascript - Firebase 限制在没有用户登录的情况下访问其他页面