Добавление прослушивателя в корневой узел вовсе не является хорошей практикой, а это означает, что вы будете получать уведомления о каждом изменении, которое происходит в вашей всей базе данных.Это пустая трата денег и ресурсов.Чтобы решить эту проблему, прикрепите слушателя на два рычага глубже, как показано в следующих строках кода:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("posts").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Post post = ds.getValue(Post.class);
Log.d(TAG, post.getAuthor());
//Add the post object to a list and pass it to the adapter
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
Вывод в вашем logcat будет:
danchik_kilmez
Редактировать:
В вашем вопросе не было ничего, что указывало бы на то, что вы хотите получать все сообщения всех пользователей, однако для этого вам нужно внести изменения в структуру базы данных, чтобы позволить вам выполнять такой запрос.Используя вашу фактическую схему базы данных, это невозможно.Чтобы решить эту проблему, вы должны продублировать данные.Эта практика называется denormalization
и является обычной практикой, когда дело доходит до Firebase.Для лучшего понимания, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase .
Кроме того, когда вы дублируете данные, есть одна вещь, которую нужно иметь в виду,Точно так же, как вы добавляете данные, вы должны поддерживать их.Другими словами, если вы хотите обновить / обнаружить элемент, вы должны делать это в каждом месте, где он существует.
При этом вам следует создать еще один узел с именем allPosts
, который будет содержать всесообщения всех пользователей, как в следующем примере схемы:
Firebase-root
|
--- allPosts
|
--- postId
|
--- //post details
|
--- uid: "eNAS ... tfz2"
Если вы добавите прослушиватель на узел posts
, вы сможете получить все сообщения всех пользователей.