首页 文章

从Firebase获取关联数据

提问于
浏览
0

我的firebase结构如下所示:
user structure

这些组使用firebase生成的密钥,0和1只是示例 .

enter image description here
在这些组中有更多数据,如"groupname" .

How should I retrieve the groupnames of all groups linked to a user?
我在Android上 .

亚历克斯解决了 .

1 回答

  • 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的用户的密钥 .

相关问题