Как запросить несколько дочерних элементов в Firebase с помощью FirebaseRecyclerAdapter

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-база данных в реальном времени

Вопрос:

Я создаю приложение для Android, которое запрашивает у пользователя один или несколько языков и сохраняет их в списке, а затем возвращает содержимое (используя FirebaseRecyclerAdapter) в зависимости от языка (языков), т.е. Как я могу получить дочерние элементы арабского и английского (03,01), например?. Все, что я мог получить, это дочерние элементы данных, используя:

 mRef = mFirebaseDatabase.getReference("data");
  

Моя база данных:

 "data" : {
    "Arabic" : {
      "01" : {}
    },
    "English" : {
      "03" : {}
    },
    "French" : {
      "02" : {}
    }
}
  

Комментарии:

1. Пожалуйста, предоставьте более подробную базу данных и укажите точные данные, которые вы хотите получить.

2. Спасибо за ваш комментарий, Алекс, я обновил сообщение с базой данных.

3. И какие именно данные вы хотите получить?

4. Ему нужно извлекать данные из нескольких дочерних элементов

5. Я хочу получить дочерние элементы языков, которые находятся в списке, например, если у меня есть список L= [Арабский, французский], я хочу получить дочерние элементы арабского и французского языков перед отправкой данных в FirebaseRecyclerAdapter.

Ответ №1:

Я думаю, у вас могут возникнуть проблемы с тем, как пройти DataSnapshot то, что вы получаете при чтении из Firebase.

Чтобы перемещаться по данным в вашем вопросе, вы должны сделать что-то вроде:

 mRef = mFirebaseDatabase.getReference("data");
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot languageSnapshot: dataSnapshot.getChildren()) {
            System.out.println(languageSnapshot.getKey()); // "Arabic", "English", "French"
            for (DataSnapshot childSnapshot: languageSnapshot.getChildren()) {
                System.out.println(childSnapshot.getKey()); // "01", "03", "02"
                ...
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}
  

Также смотрите Документацию Firebase о чтении списка данных со значением события.

Комментарии:

1. Спасибо, Фрэнк, возможно ли отобразить дочерние снимки в FirebaseRecyclerAdapter?

2. Конечно, но и создание пользовательского адаптера для вас немного выходит за рамки того, что мы можем разумно сделать в вопросе переполнения стека. Я рекомендую прочитать developer.android.com/guide/topics/ui/layout/recyclerview чтобы узнать, как применить код из моего ответа к пользовательскому адаптеру.