gpt4 book ai didi

java - Worker 上的数据库更改后 LiveData 未更新

转载 作者:行者123 更新时间:2023-12-02 02:13:55 25 4
gpt4 key购买 nike

我有一个工作人员将一些图像发送到服务器。当工作人员启动时,我需要将 View 状态更改为“进行中”,当工作人员完成时,我需要将 View 状态更改为“已完成”。但是,当我更新 Worker 内的 Room Database 时,我的 View 无法理解数据库已更改,并且 LiveData 未收到通知。如果我在 Worker 启动之前进行相同的调用,LiveData 就会了解更改并更新我的 View 。我遇到的问题是我的 View 不确切知道它应该更新 recyclerview 的哪个项目,所以我无法观察 View 上的 Worker。我需要在 Worker 内部进行此更新。

--- 使用代码更新 ---

fragment

viewModel.shortHistoryViewModelList.observe(viewLifecycleOwner, Observer { 
binding.viewModel = viewModel
adapter.replace(shortHistories)
binding.executePendingBindings()
scrollToItem(shortHistories)
})

View 模型

private val results: MediatorLiveData<List<ShortHistory>> = MediatorLiveData()
init {
this.state.value = NetworkStateEnum.NONE
results.addSource(repository.get()) {
results.postValue(it)
}
}

val shortHistoryViewModelList: LiveData<List<ShortHistoryViewModel>> =
Transformations.switchMap(results) { shortHistories ->
val mutableLiveData: MutableLiveData<List<ShortHistoryViewModel>> = MutableLiveData()
val list = ArrayList<ShortHistoryViewModel>()

for (shortHistory in shortHistories) {
list.add(ShortHistoryViewModel(shortHistory))
}
mutableLiveData.value = list
mutableLiveData
}

worker

val shortHistory = shortHistoryRepository.get(shipmentId)
shortHistory.digitalReceipt = shortHistory.digitalReceipt?.copy(status = DigitalReceiptStatusEnum.Sending.value)
shortHistoryRepository.insert(shortHistory)

最佳答案

UI 只能从 UI 线程(也是主线程)进行更新,而不能在任何其他线程(例如您正在使用的 Worker)中进行更新。在工作线程中使用 runOnUiThread(Runnable action) 方法来运行与更新 UI 相关的任何代码。

关于java - Worker 上的数据库更改后 LiveData 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57314222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com