我的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查询的方式
答案 0 :(得分:2)
这是你实现这一目标的正确方法。嵌套查询没有问题。您需要找到所有这些id,然后根据它们进行查询。我可以移动friends
下的profile-data -> user-key
节点来创建单个查询,但要知道在Firebase中最好让数据尽可能扁平化,这不是解决方案。
请记住,在不再需要时,不要忘记删除监听器,如下所示:
databaseReference.removeEventListener(valueEventListener);
希望它有所帮助。