Извлечение всех данных из базы данных Firebase

#java #android #firebase #firebase-realtime-database

#java #Android #firebase #firebase-realtime-database

Вопрос:

ANDROID: у меня есть база данных Firebase, подобная этой.фут

В моем приложении я хотел бы скомпилировать arraylist, который отображает все значения из nameofEntry [ОПИСАННОГО НИЖЕ]. Под этим я подразумеваю «balso», «nairboh» и так далее.

У меня есть ссылки:

 DatabaseReference root = FirebaseDatabase.getInstance().getReference();
DatabaseReference users = root.child("Users");
DatabaseReference childRef = users.child(userID);
DatabaseReference childRefNameNode = childRef.child(nameOfEntry);
childRefNameNode.child(nameOfEntry).setValue(nameOfEntry);
  

// ИЗВЛЕЧЕНИЕ ДАННЫХ

 childRefNameNode.child(nameOfEntry).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String valueFromDB = dataSnapshot.getValue(String.class);
                Log.i("Jimit", valueFromDB);


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
  

Но это выполняется только для одной записи. Как я могу получить больше записей? [Все из них]?

Ответ №1:

Вам нужно использовать этот фрагмент кода. Вы не использовали цикл for для обхода своих дочерних элементов.

РЕДАКТИРОВАТЬ: кроме того, обновите ссылку на базу данных следующим образом:

 //Updated ref
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userID);*

    //add listener to updated ref
    ref.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                         //use the for loop here to step over each child and retrieve data                   
                         for (DataSnapshot childSnapshot : dataSnapshot.getChildren()){
                            String valueFromDB = childSnapshot.getValue(String.class);
                            Log.i("Jimit", valueFromDB);
                        }


                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
  

Дайте мне знать, если это что-то изменит для вас.

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

1. Это не случайно

2. @augustalsina Проверьте отредактированный ответ, а также обратите внимание, что прослушиватель событий value вернет только снимок измененного значения.