Zip运算符RxJava android

时间:2017-04-22 09:56:10

标签: android rx-java

我想要什么

我想打电话给

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) {

                    }
                });

1 个答案:

答案 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(...);