要从PeriodicWorkRequest获取输出数据,可以使用WorkManager的LiveData和observe方法来观察工作的状态和结果。以下是一个示例代码,演示如何解决这个问题:
首先,创建一个Worker类,用于执行后台任务并返回结果:
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// 执行后台任务
// ...
// 返回结果
Data outputData = new Data.Builder()
.putString("result", "Work completed successfully.")
.build();
return Result.success(outputData);
}
}
接下来,创建一个PeriodicWorkRequest,并将其提交给WorkManager执行:
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(MyWorker.class, 1, TimeUnit.DAYS)
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
最后,在Activity或Fragment中观察工作的状态和结果:
WorkManager.getInstance().getWorkInfoByIdLiveData(periodicWorkRequest.getId())
.observe(this, new Observer() {
@Override
public void onChanged(@Nullable WorkInfo workInfo) {
if (workInfo != null) {
if (workInfo.getState().isFinished()) {
Data outputData = workInfo.getOutputData();
String result = outputData.getString("result");
// 处理结果
// ...
}
}
}
});
通过LiveData和observe方法,您可以观察工作的状态,并在工作完成后获取输出数据。