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

时间:2017-11-09 11:53:22

标签: android firebase firebase-realtime-database

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

enter image description here

那么我如何获得一个随机用户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) { }
            });
}

我感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

您似乎知道此值的位置,因此您当前的代码几乎就在那里。您只需要对返回的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节点。

答案 1 :(得分:0)

假设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数据库执行查询时,可能会有多个结果。 因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。