gpt4 book ai didi

android - EditWorkManager 方法 getWorkInfoByIdLiveData 未提供 WorkInfo

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

我正在尝试使用 WorkManager 实例中存在的 getWorkInfoByLiveData 方法获取我的 WorkerInfo。

val workInfo = workManager.getWorkInfoByIdLiveData(uuid).value

WorkInfo 始终为空。另外,我从主线程调用这个方法。

我如何检查此方法的场景。当用户发送网络请求时,我尝试将我的工作人员排队,如果互联网未连接,我只需向 WorkManager 注册工作即可。一段时间后,如果我尝试使用UUID获取WorkerInfo,它总是会给我空值。

注意:当调用getWorkInfoByLiveData时,Worker 不会在此时执行。

难道我不希望 WorkManager 给我状态为 ENQUEUED 的 WorkInfo 吗?

编辑 1:所以,另一种情况是这样的,我正在开发的应用程序就像一个社交应用程序。现在,在注册第一个工作人员后,假设用户不想看到特定用户的帖子,因此我需要注册第二个工作人员,因为此时用户互联网不可用。现在我需要做的是取消之前注册的工作人员,然后创建一个工作人员链,不显示用户的帖子 beginWiththen 获取所有帖子。现在,为了取消该工作人员,我检查前一个工作人员是否仍处于排队状态,然后取消它并创建一个新的链或工作人员。

这是代码。

fun Context.isWorkerRegistered(uuid: UUID?): Boolean {
val id = uuid ?: return false
val workerInfo = workManager.getWorkInfoByIdLiveData(id).value
return workerInfo?.state == WorkInfo.State.ENQUEUED
}

workInfo 实例始终为 null。

最佳答案

注意:在添加 Activity 观察者之前,Livedata 不会计算该值。

getWorkInfoByIdLiveData()返回 LiveData<WorkInfo>您需要观察才能获取 workInfo 值:

val status = workManager.getWorkInfoByIdLiveData(uuid)
.observe(this, Observer{ workInfo ->

if (workInfo!=null){
// ...
}
}

你可以看看WorkManager's codelab看看如何使用它。

关于android - EditWorkManager 方法 getWorkInfoByIdLiveData 未提供 WorkInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956592/

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