在我的活动中,我有一个观察者,观察该查询
@Query("""Select *,
(Select account_id from accounts where account_id = from_account_id) as contact_account_id,
(Select first_name from accounts where account_id = from_account_id) as contact_first_name,
(Select last_name from accounts where account_id = from_account_id) as contact_last_name
from messages inner join messageQueue on messages.client_message_id = messagequeue.client_message_id
where ((msg_type = 1 and body <> "") or msg_type <> 1)
order by message_date desc
""")
fun getChatRoomGroupMessages(): DataSource.Factory<Int, ChatMessageItem>
ChatItem是2个表的关系
@Embedded
var message: MessageDto? = null
@Relation(parentColumn = "client_message_id", entityColumn = "client_message_id", entity = MessageQueueDto::class)
var messageQueue: MessageQueueDto? = null
“ client_message_id”是表消息及其自动递增的主键。
当我想“发送”一条消息时,我在消息中创建一个条目,然后获取插入返回的client_message_id,将其设置为messageQueue并在其中创建一个条目,这样我就可以拥有关系了。
viewModelScope.launch(Dispatchers.IO) {
val clientMessageIdList = insertMessages(messageDtoList)
for (i in clientMessageIdList.indices) {
messageQueueDtoList[i].clientMessageId = clientMessageIdList[i]
}
insertMessageQueues(messageQueueDtoList)
}
将对象插入数据库时,将触发LiveData对象,并且我会在屏幕上看到消息
一切正常,直到我要发送图像。为了做到这一点,我有一个在工作经理内部创建消息和消息队列的过程。但是当我做同样的事情时(先保存到消息中,然后再保存到消息队列中),然后我的观察者就不会被触发。
class FileStorage @AssistedInject constructor(
@Assisted private val appContext: Context,
@Assisted private val params: WorkerParameters,
private val messagesRepository: MessagesRepository
) : CoroutineWorker(appContext, params) {
................
val headerClientMessageId =
messagesRepository.insertMessages(headerFileMessagesArray)
for (i in headerClientMessageId.indices)
headerFileMessageQueuesArray[i].clientMessageId =
headerClientMessageId[i]
messagesRepository.insertMessageQueues(headerFileMessageQueuesArray)
}
一旦我做了一个新的插入,然后我就会看到以前的插入以及新的插入。 我使用Dagger2进行注入,并且已经将数据库,Daos和存储库声明为Singletons。
有人知道这里发生的事情吗?
答案 0 :(得分:0)
最后,我的问题是使用Dagger注射。在我的应用程序类中,我设置了两个AppDaggerComponent实例,并将它们注入到应用程序和WorkManager中。
{ [key: string]: unknown }
解决了问题... !!