Я создаю приложение для чата, и вот как выглядит моя База данных: ![Please, click here to see](https://i.stack.imgur.com/26W4Z.jpg)
Итак, в настоящее время у меня есть узел users
и узел chats
.
Узел users
сохраняет последнюю дату последнего входа в систему и идентификаторы чатов , частью которых в данный момент является пользователь. В узле chats
сохраняются идентификаторы пользователя , которые составляют часть диалога, а также сообщения , которые имеют Id , Содержимое , Дата отправки и Пользователь, отправивший .
В настоящее время я строю действие, в котором отображаются разговоры, частью которых является пользователь ( используя просмотрщик).
Чтобы узнать, в какие разговоры входит пользователь, вместо извлечения всех разговоров я извлекаю идентификаторы чатов , которые находятся в узле user
, и Я поместил их все в ArrayList<String>
.
![Here is a picture that helps you see what goes in the ArrayList](https://i.stack.imgur.com/5EnZ9.jpg)
Код, который извлекает эти идентификаторы и помещает их в ArrayList, таков:
db.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDataChange(p0: DataSnapshot) {
p0.children.forEach{
chatsId.add(it.key.toString()) // ChatsId is the ArrayList<String>
}
getChats2()
}
})
И этот код работает как шарм. Проблема возникает, когда я пытаюсь выполнить запрос к узлу chats
просто для того, чтобы получить чат, значение которого равно значениям, полученным в приведенном выше коде. ** Этот код реализован в getsChat2 () **:
db = FirebaseDatabase.getInstance().getReference("chats")
// For each chatId, queries the DB to find the chat reference
chatsId.forEach {
val query = db.equalTo(it)
query.addValueEventListener(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDataChange(p0: DataSnapshot) {
p0.children.forEach {it2->
println("Do something")
// Do something with the chat reference
}
}
})
}
Проблема в том, что даже если существует узел с тем же значением, что и переменная chatsId
, println("Do Something)
на самом деле никогда не будет печать.