Firebase / android如何获取子键和值?

时间:2017-11-03 14:10:29

标签: android firebase firebase-realtime-database key

我有这个DB:

users: {
     0 : {
         name: xx
         age: 11
         books:{
               0 : true
               3 : true
         }
     }
     1 : {
         name: yy
         age: 12
         books:{
               1 : true
               4 : true
         }
     }
}

我已经参考了db als:

database = FirebaseDatabase.getInstance();
refdb = database.getReference();

和查询als:

Query = refdb.child("users");

我需要获得所有对(名称:值)和用户对书籍(id:true)als:

0 : true
3 : true

我正在使用它来获得对(id:true):

refdb.child("users").child("books").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) { 
        pck.setText(pack);
        for (DataSnapshot dttSnapshot2 : dataSnapshot.getChildren()) {
             pack = dttSnapshot2 .getKey().toString()+":"+dttSnapshot2 .getValue().toString();
             pck.append(pack);
         }
...

其中pck是textView。 我的问题是每次他在textView中打印空字符串。 如何获取这些数据并将其写入文本视图?

1 个答案:

答案 0 :(得分:7)

refdb.child("users").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot uniqueKeySnapshot : dataSnapshot.getChildren()){
            //Loop 1 to go through all the child nodes of users
            for(DataSnapshot booksSnapshot : uniqueKey.child("Books").getChildren()){
            //loop 2 to go through all the child nodes of books node
                String bookskey = booksSnapshot.getKey();
                String booksValue = booksSnapshot.getValue();
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
}

到目前为止,我还没有测试过此代码,但我希望你能得到这个想法。无法跳过唯一ID节点,因为firebase不知道您要从中提取数据的唯一ID。因此,要么使用foreach循环遍历所有唯一ID,要么指定您想要数据的唯一ID。