如何解决我们应该如何将工作请求与 android 工作管理器中的输入数据链接起来?
我正在尝试通过将一个输出传递到另一个来学习工作经理链接
这是我的目标,
-
我有两个工作请求 WR1(获取我的网址)和 WR2(向网址发送请求)
-
在 WR1 完成之前,我不能也不应该启动 WR2。
-
WR1 应该返回一个 url,我必须将其作为 inputData 发送到 WR2
-
我几乎可以不用链接就可以做到这一点。但我想在链接中探索它。
这是我正在进行的片段。 请帮忙。
WorkManager mWorkManager = WorkManager.getInstance(this);
//WR1
OneTimeWorkRequest urlRequest = new
OneTimeWorkRequest.Builder(UriResolveWorker.class).build();
//WR2
OneTimeWorkRequest pullRequest = new
OneTimeWorkRequest.Builder(PullReplicator.class).build();
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWorkManager.beginWith(urlRequest)
.then(pullRequest) // I should be able to pass the result of urlRequest.
.enqueue();
}
});
mWorkManager.getWorkInfoByIdLiveData(urlRequest.getId()).observe(this,new
Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
if (workInfo != null) {
WorkInfo.State state = workInfo.getState();
// I will get the URL here and i want to pass this to WR2
message = workInfo.getOutputData().getString("work_result");
tvStatus.append("\n"+"state : "+state.toString() + "message : " +message + "\n");
}
}
});
mWorkManager.getWorkInfoByIdLiveData(pullRequest.getId()).observe(this,new Observer<WorkInfo>() {
@Override
public void onChanged(WorkInfo workInfo) {
if (workInfo != null) {
WorkInfo.State state = workInfo.getState();
String count = workInfo.getOutputData().getString("work_result");
tvStatus.append("\n"+"state : "+state.toString() + " No of Documents : " +count + "\n");o
}
}
});
解决方法
在UriResolveWorker 类的doWork() 方法中返回Result 对象之前,您可以将url 传递给Result.success()。
首先创建Data.Builder()的对象,然后将url放入:
['\nmultiline comment above class read me\nread me too\n','\n multiline inside class\n ','THIS IS NOT A COMMENT','dont read me too']
之后,使用 outputDataBuilder 创建 Data 对象:
Data.Builder outputDataBuilder = Data.Builder();
outputDataBuilder.putString(KEY_URL_STRING,url.toString());
现在您可以使用 outputData 返回 Result :
Data outputData = outputDataBuilder.build();
Workmanager 在第一个完成后将数据发送到 pullRequest。
在获取数据之前,请检查 WorkRequest 的状态。 例如:
return Result.success(outputData);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。