У меня есть следующая функция, которая получает все объекты сообщения из моей БД и обновляет значение внутри каждого из них -
private fun initRoomObserving() {
dashboardViewModel = ViewModelProvider(this).get(DashboardViewModel::class.java)
dashboardViewModel.getAllMessagesEntitiesForGroup(currentGroupId).observe(this, Observer { receivedMessageList ->
Log.d("observerCalled", "called")
receivedMessageList.forEach {
it.isReceiver = it.senderUsername != userPhoneNumber
if (!messagesList.contains(it) && currentGroupId == it.groupId) {
messagesList.add(it)
lastMessage = it.content
}
}
messagesList.forEach {
launch {
if (!it.didSeeMessage) {
dashboardViewModel.updateMessageAsRead(it.messageId, currentGroupId)
}
}
}
conversationAdapter.notifyItemInserted(messagesList.size)
conversationAdapter.notifyItemRangeChanged(messagesList.size - 1, 1)
conversationRecyclerview.scrollToPosition(messagesList.size - 1)
})
}
Проблема заключается в том, что, как только я запускаю функцию updateMessageAsRead
, которая приводит к следующему методу дао -
@Query("update ${Constants.messagesTable} set didSeeMessage = 1 where messageId = :messageId and groupId = :groupId")
suspend fun updateMessageAsRead(messageId : String, groupId : String)
он снова и снова вызывает моего наблюдателя ViewModel, и я застреваю в бесконечном l oop наблюдении - обновлении - наблюдении
как я могу сбежать это l oop и помешать наблюдению полей, на которые влияет эта функция?