从Firebase获取关联数据

时间:2017-08-03 15:05:40

标签: android firebase firebase-realtime-database

我的firebase结构如下所示: user structure
这些组使用firebase生成的密钥,0和1只是示例 enter image description here   在这些群组中有更多数据,例如" groupname"。

如何检索链接到用户的所有群组的群组名称?
  我在Android上。

Alex解决。

1 个答案:

答案 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的用户的密钥。