我的firebase结构如下所示:
这些组使用firebase生成的密钥,0和1只是示例
在这些群组中有更多数据,例如" groupname"。
如何检索链接到用户的所有群组的群组名称?
我在Android上。
Alex解决。
答案 0 :(得分:1)
假设groups
节点是Firebase根目录的直接子节点并且在单个组内,则有一个名为groupName
的密钥,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference groupsRef = rootRef.child("groups");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
Log.d("TAG", name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
groupsRef.addListenerForSingleValueEvent(eventListener);
如果您只需要获取用户链接到的组的组名,则需要像这样查询两次:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userGroupsRef = rootRef.child("users").child(userKey).child("groups");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String groupKey = ds.getKey();
DatabaseReference groupKeyRef = rootRef.child("groups").child(groupKey);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("name").getValue(String.class);
Log.d("TAG", name);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
groupKeyRef.addListenerForSingleValueEvent(valueEventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
userGroupsRef.addListenerForSingleValueEvent(eventListener);
其中userKey
是您希望获取组ID的用户的密钥。