Отображение всех сообщений зарегистрированных пользователей и следующих

# #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.