android - EditWorkManager 方法 getWorkInfoByIdLiveData 未提供 WorkInfo
问题描述
我正在尝试使用 WorkManager 实例中存在的 getWorkInfoByLiveData 方法获取我的 WorkerInfo。
val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value
WorkInfo 始终为空。另外,我正在从主线程调用此方法。
我如何检查此方法的场景。当用户发送网络请求时,我尝试将我的工作人员排队,如果没有连接互联网,我只需向 WorkManager 注册一个工作。一段时间后,如果我尝试使用UUID获取 WorkerInfo ,它总是会给我空值。
注意:调用getWorkInfoByLiveData时,此时不会执行 Worker。
难道我不希望 WorkManager 给我带有ENQUEUED状态的 WorkInfo。
编辑1: 所以,另一种情况是这样的,我正在使用的应用程序就像一个社交应用程序。现在注册第一个工作人员后,假设用户不想看到特定用户的帖子,所以我需要在这里注册我的第二个工作人员,因为此时用户互联网不可用。现在我需要做的是取消以前注册的工作人员,然后创建一个工作人员链,不显示用户的帖子到beginWith,然后获取所有帖子。现在为了取消工作人员,我检查之前的工作人员是否仍处于排队状态,然后取消它并创建一个新的链或工作人员。
这是代码。
fun Context.isWorkerRegistered(uuid: UUID?): Boolean {
val id = uuid ?: return false
val workerInfo = workManager.getWorkInfoByIdLiveData(id).value
return workerInfo?.state == WorkInfo.State.ENQUEUED
}
workInfo实例始终为空。
解决方案
注意:在添加活动观察者之前,Livedata 不会计算该值。
getWorkInfoByIdLiveData()
返回 aLiveData<WorkInfo>
您需要观察以获取 workInfo 值:
val status = workManager.getWorkInfoByIdLiveData(uuid)
.observe(this, Observer{ workInfo ->
if (workInfo!=null){
// ...
}
}
您可以查看WorkManager 的 codelab以了解如何使用它。
推荐阅读
- file-upload - 将 UploadedFile (primefaces) 转换为 FileObject (Apache Common)
- reactjs - 为什么在 React 中,我的 axios API 调用具有包含 Bearer 的授权标头
但未获得授权并给出 401 错误 - c# - or-tools - 从 SumArray() 计算标准差
- windows - 不支持产品 (Visual Studio 2019)
- openshift - 可用Openshift 当前(3.11)开源APM解决方案
- javascript - angularjs:使用输入标签按名称过滤未保存更改的数组
- c++ - 如果对朋友应用访问控制怎么办?
- python - 如何在特定版本的 python 上使用 pip?
- python - 如何正确打包一个字符和一个数字?
- android - 重用连接如何在 android 上实现高效网络?