Android Firebase:如何获取不同用户ID的密钥?

nbysray5  于 2022-11-17  发布在  Android
关注(0)|答案(2)|浏览(197)

我试图获取存储在当前用户ID下的不同用户ID。我不确定如何获取具有随机用户ID的实际密钥。请参阅Firebase结构。

那么我如何获得实际的密钥,即随机的用户ID呢?
请参阅目前为止的程式码:

public void getAgencyAdminID(final String nodeName){
    database.child("sand")
            .child(nodeName)
            .child("agencyAdmin")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    System.out.println(dataSnapshot.toString());
                }
                @Override
                public void onCancelled(DatabaseError databaseError) { }
            });
}

我很感激任何帮助,谢谢!

dgtucam1

dgtucam11#

假设sand节点是Firebase数据库的直接子节点,并且nodeName指向ertuserIDrC6eW88yy3hhswdBrCT9cmd6rJB2,要获取该键,请使用以下代码:

public void getAgencyAdminID(final String nodeName){
    database.child("sand")
        .child(nodeName)
        .child(userID)
        .child("agencyAdmin")
        .addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String key = child.getKey();
                Log("TAG", key);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) { }
    });
}

您需要循环的原因:当你对Firebase数据库执行一个查询时,可能会有多个结果。2所以快照包含了这些结果的列表。3即使只有一个结果,快照也会包含一个结果的列表。

mrwjdhj3

mrwjdhj32#

看起来你知道这个值的位置,所以你的当前代码差不多就在那里了。你只需要遍历返回的DataSnapshot的子节点,然后使用DataSnapshot#getKey()获取每个子节点的键:

public void getAgencyAdminID(final String nodeName){
    database.child("sand")
            .child(nodeName)
            .child(userID)
            .child("agencyAdmin")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot child : dataSnapshot.getChildren()) {
                        System.out.println(child.getKey());
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) { }
            });
}

这里需要在DataSnapshot#getChildren()上使用for迭代循环,因为返回的DataSnapshot包含agencyAdmin节点上的所有子节点。

相关问题