java - 如果发生超时异常,重新订阅可观察对象

标签 java android rx-java reactive-programming reactivex

我正在使用改造来返回一个可观察的结果,作为对服务器的 REST API 调用的结果。发生请求超时异常并且 observable 停止执行是很常见的。如果异常是特定类型,如何重新订阅重试

myObservable
    .subscribe(new Subscriber<Something> sub(){
        @override
        void onNext(Something something){
            //do something with something
        }
                    @override
        void onError(Throwable e){
            //retry and resend call to server if e is request timeout exception
        }

最佳答案

您可以使用retry运算符。

示例:

myObservable
    .retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException)
    .subscribe(new Subscriber<Something> sub(){
        @override
        void onNext(Something something){
            //do something with something
        }
                    @override
        void onError(Throwable e){

        }

在示例中,当SocketTimeoutException最多出现3次时,它将重新订阅。

或者没有 lambda:

myObservable
    .retry(new Func2<Integer, Throwable, Boolean>() {
                @Override
                public Boolean call(Integer retryCount, Throwable throwable) {
                    return retryCount < 3 && throwable instanceof SocketTimeoutException;
                }
            })
    .subscribe(new Subscriber<Something> sub(){
        @override
        void onNext(Something something){
            //do something with something
        }
                    @override
        void onError(Throwable e){

        }

关于java - 如果发生超时异常,重新订阅可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39285364/

相关文章:

android - 在 RxJava 中取消订阅 rx.Single

java - 鉴于已检查的错误不会在我的程序中抛出,这个未经检查的包装器是否可以接受

java - 如果我想使用我知道它在大多数用户计算机中不可用的特定字体

java - 是否可以在 mybatis "select"中使用临时变量?

java - :mobile:compileDebugJavaWithJavac FAILED

Android 仪表板图标大小

android - 仅在条件匹配时返回组合的 Observable

rx-java - RxJava2 订阅在一段时间后停止观察,但在 flowable 完成时继续

java - 无法 Autowiring Spring Security 实现类

Android动态更改标记标题