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

mxm*_*xml 32 android firebase firebase-realtime-database

我有这个firebase数据库

在此输入图像描述

我需要获得所有用户的电话号码,我应该使用哪个听众来获取所有用户?

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

我搜索了文档,它与之相关DataSnapshot但我DataSnapshot没有听众就得到了!寻找DataSnapshout是否正确或我是否应该使用其他东西

Tem*_*Dev 42

首先检索用户数据快照.

//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
                }
            });
Run Code Online (Sandbox Code Playgroud)

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

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());
}
Run Code Online (Sandbox Code Playgroud)

此侦听器仅在显式调用时检索数据快照.除了用户节点之外,还应考虑在"allPhoneNumbers"节点下存储数字列表.这将使您的数据快照更轻,更容易处理收集所有数字.如果你说数百个用户,"用户"数据快照将太大,"allPhoneNumbers"列表将更有效率.

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


小智 12

      DatabaseReference ref1= FirebaseDatabase.getInstance().getReference();
      DatabaseReference ref2,ref3,ref4;    
       ref2 = ref1.child("User");


       ref2.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Userlist = new ArrayList<String>();                
            // Result will be holded Here
            for (DataSnapshot dsp : dataSnapshot.getChildren()) {
                  Userlist.add(String.valueOf(dsp.geValue())); //add result into array list

                }
    /* userlist will store all values of users, then point to every userlist item 
    and get mobile numbers*/
Run Code Online (Sandbox Code Playgroud)

  • 谢谢分配,你说得很清楚 (2认同)
  • 这么大的帮助!非常感谢!&gt; 3 (2认同)