Android 需要重新构造JSON数据库或进行单个查询(Firebase)

Android 需要重新构造JSON数据库或进行单个查询(Firebase),android,json,firebase,firebase-realtime-database,Android,Json,Firebase,Firebase Realtime Database,我的JSON树中有两个分支,如下所示: users { profile-data { user-key { //here is users profile fields like nickname and other } ...... } friends { user-key { friend's-user-key:true

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

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
            ......
        }
    }
}
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) {
            }
        });
databaseReference.removeEventListener(valueEventListener);
问题是获取用户的所有用户配置文件数据,这些用户是任何用户的朋友。我没有找到通过一个查询获取所有这些数据的方法,因此我需要编写如下内容:

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
            ......
        }
    }
}
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) {
            }
        });
databaseReference.removeEventListener(valueEventListener);

所以问题是,我需要发出许多请求来逐个获取朋友的个人资料数据,所以我需要重新构建我的数据库,或者找到将其编写为一个查询的方法,这是实现这一点的正确方法。嵌套查询没有问题。您需要找到所有这些id,然后根据它们进行查询。我可以移动
profile data->user key
下的
friends
节点来创建一个查询,但我知道在Firebase中,最好将数据尽可能扁平化,这不是一个解决方案

请记住,当不再需要侦听器时,不要忘记将其删除,如下所示:

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
            ......
        }
    }
}
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) {
            }
        });
databaseReference.removeEventListener(valueEventListener);

希望有帮助。

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

请记住,当不再需要侦听器时,不要忘记将其删除,如下所示:

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
            ......
        }
    }
}
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) {
            }
        });
databaseReference.removeEventListener(valueEventListener);
希望能有帮助