我想要什么
我想打电话给
1 将照片上传到服务器并返回上传链接的网络服务。
2 webservice通过第一 webservice保存返回的链接。
我想结合两个observable并同时获得结果
我怀疑
如果我的第一次网络服务成功解雇且第二次遇到错误(例如:网络错误,服务器错误等),会发生什么?
我该如何检测?并且只重试第二次 webservice
我不能做什么
如果第二次失败,我无法重试这两个网络服务,因为我最终会为第一个网络服务发送重复文件。
我的代码
// Upload file (photos,documents etc ):
@POST("some link")
@FormUrlEncoded
Observable<UploadFile> uploadFile(@FieldMap HashMap<String, Object> fields);
// Save link (photos,documents etc ):
@POST("some link")
@FormUrlEncoded
Observable<SaveLink> saveLink(@FieldMap HashMap<String, Object> fields);
// Upload file
Observable<UploadFile> observable = retrofitService.uploadFile(map);
subscriptionUploadFile = observable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<UploadFile>() {
@Override
public void onCompleted() {
CommonFunction.printDebug(TAG, "completed");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(UploadFile model) {
}
});
// Save link
Observable<SaveLink> observable = retrofitService.saveLink(map);
subscriptionSaveLink = observable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<SaveLink>() {
@Override
public void onCompleted() {
CommonFunction.printDebug(TAG, "completed");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(SaveLink model) {
}
});
答案 0 :(得分:3)
依赖性延续通常通过flatMap
完成,您可以将retry
应用于第二个Observable
:
uploadFile(map)
.subscribeOn(Schedulers.io())
.flatMap(file -> {
map.put("URL", file.getURL());
return saveLink(map).retry(10);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);