如何获取firebase数据库中所有孩子的数据?

2024-06-07

我有这个 firebase 数据库

我需要获取用户的所有电话号码,我应该使用哪个侦听器来获取所有孩子?

每个用户都作为一个对象添加,其中用户 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
                }
            });

然后循环访问用户,访问他们的地图并收集电话字段。

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,具体取决于用户的电话实例字段的类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取firebase数据库中所有孩子的数据? 的相关文章

随机推荐