Как вытащить данные из Firebase, который имеет несколько дочерних? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь получить данные из моей базы данных в реальном времени. Проблема, с которой я здесь сталкиваюсь, заключается в том, что я могу успешно извлечь данные из / ItemList, но когда я пытаюсь извлечь данные из / ItemRequest, данные не могут быть извлечены, но когда я даю ему конкретный путь, такой как / ItemRequest / admin, это работает. То, что я пытаюсь сделать, это заполнить представление списка всем дочерним элементом из / ItemRequest как от администратора, так и от пользователя. Я использую адаптер списка Firebase для заполнения моего списка, поэтому есть ли способы сделать то, что я хочу?

Структура базы данных

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 января 2019

То, что я пытаюсь сделать, это заполнить представление списка всем потомком из / ItemRequest от администратора и пользователя.

Чтобы решить эту проблему, вам нужно дважды перебрать объект DataSnapshot, как показано в следующих строках кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemRequestRef = rootRef.child("ItemRequest");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
            for(DataSnapshot ds : dSnapshot.getChildren()) {
                String productName = ds.child("ProductName").getValue(String.class);
                Log.d(TAG, productName);
            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
itemRequestRef.addListenerForSingleValueEvent(valueEventListener);

Вывод в вашем logcat будет:

Manix
Manix
Manix

Если вы хотите отобразить эти результаты в ListView, см. Мой ответ из этого поста:

0 голосов
/ 11 января 2019

AFAIK, FirebaseListAdapter не очень хорошо работает с дочерними объектами, у которых есть несколько дочерних объектов, и нет способа запроса их фильтрации. Я бы предпочел вручную вытягивать дочерние элементы один за другим, используя DataSnapshots, добавляя их в массив списков, а затем заполняя список с помощью специального адаптера массива вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...