如果出错,如何获取最后一个元素或再次请求(RxJava + Retrofit)

时间:2017-02-22 08:29:12

标签: java android retrofit2 rx-java2

通过Retrofit实现API端点,返回Observable

Observable<Post> postObservable = sampleApi.getPost(1);

对rx的类似cache运算符需要一些东西,但不要缓存错误。

因此,如果postObservable的第一个订阅者收到错误,那么之后的第二个订阅者可以在onNext请求API之后再次获得postObservable个消费者中的Post对象。 因此,如果postObservable的第一个订阅者在onNext个消费者中获得Post对象,那么之后的第二个订阅者会立即在onNext消费者中获得相同的Post对象。

1 个答案:

答案 0 :(得分:0)

找到解决方案,但不能确定它是否正确且不那么优雅:

    postObservable = Observable.wrap(
            new ObservableSource<Post>() {
                private Post lastResult;

                @Override
                public void subscribe(Observer<? super Post> observer) {
                    if (lastResult == null) {
                        sampleApi.getPost(1)
                                .doOnNext(post -> lastResult = post)
                                .subscribe(observer);
                    } else {
                        Observable.just(lastResult)
                                .subscribe(observer);
                    }
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread());