#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) {
}
});