【问题标题】:android firebase database: how to get all nodes that are in a set of valuesandroid firebase数据库:如何获取一组值中的所有节点
【发布时间】:2018-05-17 10:33:13
【问题描述】:
我正在尝试检索用户的朋友列表,以便可以在列表视图中显示他们。在我的 firebase 数据库中,朋友和用户信息的结构如下:
所以基本上,我想获取朋友部分中列出的用户 ID 并查询我的用户数据以获取该组用户 ID 中每个节点下的所有信息。如何使用 android firebase 数据库 sdk 查询来实现这一点?我希望能够在单个数据库查询中检索所有用户。
谢谢。
【问题讨论】:
标签:
android
database
list
firebase
firebase-realtime-database
【解决方案1】:
您无法在单个查询中获取该数据,您需要查询您的数据库两次。这是 Firebase 的常见做法。假设 friends 和 users 节点是您的 Firebase 根的直接子节点,要实现这一点,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference friendIdRef = rootRef.child("friends").child(friendId)
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String key = ds.getKey();
DatabaseReference usersRef = rootRef.child("users").child(key);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
String username = dSnapshot.child("username").getValue(String.class);
Log.d("TAG", username);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
friendIdRef.addListenerForSingleValueEvent(valueEventListener);
它将打印这些特定用户的所有用户名。还有一点需要注意的是,你不需要在你的数据库中添加那些值为false的朋友,只需要那些值为true的朋友。