需要重组JSON数据库或进行单一查询(Firebase)

时间:2017-07-03 12:13:26

标签: android json firebase firebase-realtime-database

我的JSON树中有2个分支,如下所示:

users {
    profile-data {
           user-key {
                //here is users profile fields like nickname and other
           }
           ......
    }
    friends {
        user-key {
            friend's-user-key:true
            another-friend's-user-key:true
            ......
        }
    }
}

问题是获取用户的所有用户配置文件数据,这些用户是任何用户的朋友。我没有找到通过1个查询获取所有这些数据的方法所以我需要写这样的东西:

usersFriendsRef.child("userId").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot child : dataSnapshot.getChildren()) {
                    String userId = child.getKey();
                     usersProfileDataRef.child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                        ////Only here i can get user's profile data    
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
                }
            }

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

所以问题是我需要提出很多请求才能获取朋友。配置文件数据一个接一个,所以我需要重新构建我的数据库或找到将其写为1查询的方式

1 个答案:

答案 0 :(得分:2)

这是你实现这一目标的正确方法。嵌套查询没有问题。您需要找到所有这些id,然后根据它们进行查询。我可以移动friends下的profile-data -> user-key节点来创建单个查询,但要知道在Firebase中最好让数据尽可能扁平化,这不是解决方案。

请记住,在不再需要时,不要忘记删除监听器,如下所示:

databaseReference.removeEventListener(valueEventListener);

希望它有所帮助。