And*_*ice 6 android kotlin android-livedata android-jetpack android-workmanager
我正在尝试从WorkManagerdoWork()的方法进行 API 调用。我收到了一份回复清单。如何将这个复杂对象设置为 WorkManager 的输出?MutableLiveData
请在下面找到相同的实现:
class FetchWorkManager(context: Context, params: WorkerParameters): Worker(context, params) {
var postInfoLiveData: LiveData<List<PostInfo>> = MutableLiveData()
@SuppressLint("RestrictedApi")
override fun doWork(): Result {
fetchInfoFromRepository()
// Setting output data
val data = Data.Builder()
.putAll(postInfoLiveData)
//.put("liveData", postInfoLiveData)
.build()
return Result.success(data)
}
fun fetchInfoFromRepository() {
val retrofitRepository = RetrofitRepository()
postInfoLiveData = retrofitRepository.fetchPostInfoList()
}
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?
Worker从with成员返回结果不是预期的行为LiveData。的结果Worker应该作为startWork方法的返回值返回。可以使用Result一些数据方法来构造对象。ListenableWorker.Result.success
const val WORKER_RESULT_INT = "WORKER_RESULT_INT"
class WorkerWithOutput(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
// do some work
return Result.success(Data.Builder().putInt(WORKER_RESULT_INT, 123).build())
}
}
Run Code Online (Sandbox Code Playgroud)
要从外部获取此数据,getWorkInfoXXX应使用其中一种方法。
fun getResult(context: Context, owner: LifecycleOwner, id: UUID) {
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(id)
.observe(owner, Observer {
if (it.state == WorkInfo.State.SUCCEEDED) {
val result = it.outputData.getInt(WORKER_RESULT_INT, 0)
// do something with result
}
})
}
Run Code Online (Sandbox Code Playgroud)
活动或片段可以作为传递LifecycleOwner(取决于您的情况)。WorkRequest.getId用于完成id工作。
值得注意的是,ListenableWorker.setProgressAsync在这种情况下,它也很有用。
| 归档时间: |
|
| 查看次数: |
9602 次 |
| 最近记录: |