Я хочу иметь возможность прослушивать обновления в реальном времени в БД Firebase, используя сопрограммы Kotlin в моей ViewModel.
Проблема заключается в том, что при создании нового сообщения в коллекции мое приложение зависает и не восстанавливаетсяиз этого состояния.Мне нужно убить его и перезапустить приложение.
Впервые оно проходит, и я вижу предыдущие сообщения в пользовательском интерфейсе.Эта проблема возникает, когда SnapshotListener
вызывается во второй раз.
Моя observer()
функция
val channel = Channel<List<MessageEntity>>()
firestore.collection(path).addSnapshotListener { data, error ->
if (error != null) {
channel.close(error)
} else {
if (data != null) {
val messages = data.toObjects(MessageEntity::class.java)
//till this point it gets executed^^^^
channel.sendBlocking(messages)
} else {
channel.close(CancellationException("No data received"))
}
}
}
return channel
Вот как я хочу наблюдать за сообщениями
launch(Dispatchers.IO) {
val newMessages =
messageRepository
.observer()
.receive()
}
}
ПослеЯ заменил sendBlocking()
на send()
Я все еще не получаю новых сообщений в канале.SnapshotListener
сторона выполнена
//channel.sendBlocking(messages) was replaced by code bellow
scope.launch(Dispatchers.IO) {
channel.send(messages)
}
//scope is my viewModel
Как наблюдать сообщения в firestore / realtime-dbs, используя сопрограммы Kotlin?