web-dev-qa-db-ja.com

Firebase / Androidはどのようにして子供のキーと値を取得しますか?

私はこの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");

私はすべてのペア(name:value)を取得する必要があり、ユーザーの場合は本のペア(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に空の文字列を出力するたびにです。これらのデータを取得してテキストビューに書き込むにはどうすればよいですか?

4
mixx
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を指定します。

11
vivek verma