Большое спасибо! Работает!

я есть эта БД:

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

У меня есть ссылка на БД:

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. Как я могу получить эти данные и записать их в текстовое представление?

 mixx03 нояб. 2017 г., 15:26
@vivekverma спасибо за ваш ответ, поэтому я должен создать запрос als Query1 = refdb.child ("users"). child ("books"); а после сделать снимок для книги ребенка?
 vivek verma03 нояб. 2017 г., 15:32
users - это ваш корневой узел с 0, 1 .. как дочерние узлы. Тогда эти дочерние узлы являются родительскими узлами для имени, возраста и книг. Таким образом, чтобы получить доступ к книгам, вам нужно пройти пользователей> 0,1 ..> книг.
 mixx03 нояб. 2017 г., 15:46
хорошо, но почему я могу получить значение имени (а не пары (имя: значение)), если я должен обойти детей пользователей 0,1,2, .., n? как я могу получить книги детей? 0,1,2, .., n теперь siply число, но позже будут однозначные ключи. как я могу обойти их?
 vivek verma03 нояб. 2017 г., 15:22
"books" не является дочерним узлом "users". Присоедините слушателя к узлу пользователей и получите снимок, а затем найдите узел снимка внутри снимка

Ответы на вопрос(1)

Решение Вопроса
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) {

    }
}

но я надеюсь, что вы поняли идею. Узлы уникального идентификатора нельзя пропустить, потому что firebase не знает, из какого уникального идентификатора вы хотите извлечь данные. Так что либо просмотрите все уникальные идентификаторы с помощью цикла foreach, либо укажите уникальный идентификатор, с которого вы хотите получить данные.

 mixx03 нояб. 2017 г., 17:17
Удивительно, это работает, спасибо вам большое!
 shariful islam02 авг. 2018 г., 18:18
Большое спасибо! Работает!

Ваш ответ на вопрос