在没有uid的情况下访问firebase的孩子

时间:2017-05-21 21:04:59

标签: android firebase firebase-realtime-database

是否可以在没有Firebase中的整个父项的情况下从对象中获取子项 例如,客户注册表,我需要所有" name"字段,但我没有用户" uid"。 ...

enter image description here

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。请使用此代码:

DatabaseReference yourRef = FirebaseDatabase.getInstance().getReference().child("usuarios");

usersRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            String uId = (String) ds.getKey();
            String nome = ds.getChild("nome").getValue(String.class);
            list.add(nome);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

你首先迭代得到那些uid,然后在DatabaseReference中使用它们。

希望它有所帮助。

答案 1 :(得分:0)

亚历克斯的答案将起作用(我的评论很好)。

但你应该意识到这会下载所有用户的所有数据。 Firebase数据库中无法仅下载每个节点的一个属性。因此,如果您想要一种有效的方式来下载名称列表,那么您应该在数据库中保留这一名称:名单列表。

usernames
  uid1: "Fernando"
  uid2: "Alex"

这样你就可以只读出名字列表:

DatabaseReference usernamesRef = FirebaseDatabase.getInstance().getReference().child("usernames");

usernamesRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            String uid = childSnapshot.getKey();
            String name = childSnapshot.getValue(String.class);
        }