# #android #firebase #firebase-realtime-database
#Android #огневая база #firebase-база данных в реальном времени
Вопрос:
Вот код, который я пробовал. Он отображает только сообщения текущего пользователя Вот изображение базы данных firebase, чтобы описать, что я пытаюсь сделать:
Я не возражаю, если ответ тоже будет в коде java. Я ценю вашу помощь.
private fun retrievePosts() { progressBar!!.visibility = View.VISIBLE val postsRef = FirebaseDatabase.getInstance().reference.child("Catalog").child(uid!!) postsRef.addValueEventListener(object : ValueEventListener { override fun onDataChange(p0: DataSnapshot) { (postList as ArrayListlt;ModelPostgt;).clear() for (snapshot in p0.children) { val post = snapshot.getValue(ModelPost::class.java) for (id in (followingList as ArrayListlt;Stringgt;)) { if (post!!.getUid() == id) { (postList as ArrayListlt;ModelPostgt;).add(post!!) progressBar!!.visibility = View.GONE } adapterPost!!.notifyDataSetChanged() } } } override fun onCancelled(p0: DatabaseError) { progressBar!!.visibility = View.GONE } }) }
Ответ №1:
Вы читаете сообщения текущего пользователя только из базы данных с помощью этого: val postsRef = FirebaseDatabase.getInstance().reference.child("Catalog").child(uid!!)
.
Чтобы прочитать сообщения от всех пользователей, вы должны инициализировать val postsRef = FirebaseDatabase.getInstance().reference.child("Catalog")
, а затем добавить дополнительный цикл (через пользовательские узлы) в свой onDataChange
.
Так что что-то вроде:
val postsRef = FirebaseDatabase.getInstance().reference.child("Catalog") postsRef.addValueEventListener(object : ValueEventListener { override fun onDataChange(p0: DataSnapshot) { (postList as ArrayListlt;ModelPostgt;).clear() for (userSnapshot in p0.children) { for (snapshot in userSnapshot.children) { val post = snapshot.getValue(ModelPost::class.java) ...
Комментарии:
1. Большое спасибо за ответ. Все получилось хорошо. Хотя я кое-что упустил. У меня есть узел, который фиксирует пользователей, следующих за определенным пользователем. Если пользователь находится в узле, я хочу отобразить сообщения пользователей и все последующие. Я надеюсь, что вы тоже сможете помочь в этом
2. Похоже, вам потребуется выполнить дополнительный вызов API Firebase, чтобы загрузить данные для этого пользователя. Это называется соединением на стороне клиента и довольно часто встречается в Firebase (и других базах данных NoSQL). Альтернативой может быть сохранение данных, которые вы хотите отобразить для каждого пользователя в узле. Подобное дублирование данных также довольно распространено в базах данных NoSQL.