Как получить все объекты из узла в базе данных Firebase?

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-realtime-database

Вопрос:

Я следил за документацией, но, несмотря ни на что, я не могу понять, как вернуть все объекты из одного узла. Например, я хочу вернуть список всех объектов компании из companies узла. Как только у меня будет этот список, я хочу разобрать их все на объекты JSON. Я впервые работаю с базой данных NoSQL, поэтому я уверен, что мне не хватает чего-то небольшого.

В настоящее время у меня есть:

 DatabaseReference companiesRef = FirebaseDatabase.getInstance().getReference("12265");

    companiesRef.child("companies").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            Log.d("Count ", dataSnapshot.getChildren().toString());
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
  

Но он просто возвращает null для value: DataSnapshot { key = companies, value = null } .

Вот моя база данных:

Ответ №1:

Вы создаете свою ссылку следующим образом:

 FirebaseDatabase.getInstance().getReference("12265");
  

Это означает, что Firebase просматривает корень базы данных и возвращает дочерний 12265 элемент оттуда. Он не выполняет автоматический поиск в дереве узла с соответствующим именем.

Итак, вам нужно указать весь путь:

 FirebaseDatabase.getInstance().getReference("android/users/12265");
  

Ответ №2:

Не добавляйте никаких параметров в свой getReference() (пусть он переходит в корень базы данных), а затем установите addListenerForSingleValueEvent . И вы также не использовали getvalue() для вашего datasnapshot. Попробуйте этот код:

 DatabaseReference companiesRef =  FirebaseDatabase.getInstance().getReference();

// this is the patch that I see from the image that you have attached.
companiesRef.child("telenotes").child("android").child("user").child("12265").child("companies").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        Log.d("Count ", dataSnapshot.getChildren().getValue().toString());
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});