android-RxJava:如何从flatMap运算符中的错误中恢复

android-RxJava:如何从flatMap运算符中的错误中恢复,第1张

概述我有一个EditText,用户在其中输入搜索查询,当用户键入内容时,我想在服务器上执行即时搜索.我尝试使用RxJava做到这一点,如下所示:RxTextView.textChanges(editQuery)//I'musingRxBindingforlisteningtotextchanges.flatMap(newFunc1<CharSequence,Observable<Use

我有一个EditText,用户在其中输入搜索查询,当用户键入内容时,我想在服务器上执行即时搜索.

我尝试使用RxJava做到这一点,如下所示:

RxTextVIEw.textChanges(editquery) // I'm using RxBinding for Listening to text changes    .flatMap(new Func1<CharSequence, Observable<UserPublic[]>>() {        @OverrIDe        public Observable<UserPublic[]> call(CharSequence query) {            return API.searchUsers(query); // I'm using Retrofit 1.9 for network calls. searchUsers returns an Observable<UserPublic[]>        }    })    .subscribe(Observers.create(        new Action1<UserPublic[]>() {            @OverrIDe            public voID call(UserPublic[] userPublics) {                processResult(userPublics);            }        })        , new Action1<Throwable>() {            @OverrIDe            public voID call(Throwable throwable) {                processError(throwable);            }    });

问题是,如果网络呼叫遇到错误,整个可观察的站点将停止.因此,当用户继续输入时,什么也不会发生.

如何修改此代码,以便:

>每当出现网络问题时,都会调用processError
>但是,当用户继续输入时,新的网络调用将继续发出(再次导致processResult / processError)

解决方法:

在订阅之前,请使用retrywhen()运算符并将其附加到可观察的链上.注意,retrywhen()的参数是一个带有Observable< Throwable>的函数.并返回Observable&lt ;?>.返回的类型无关紧要,因为运算符使用onNext()结果发起重试,而onError()或onCompleted()结果终止链.

这是一个等待5秒然后重试的天真应用程序:

observable  .retrywhen( errorObservable -> errorObservable.delay( 5, TimeUnit.SECONDS ) )  .subscribe();

这是一个较幼稚的 *** 作,它会在超时后重试,如果发生IOException,则会失败:

observable  .retrywhen( errorObservable -> errorObservable.flatMap( throwable -> { // (1)       if ( throwable instanceof IOException ) {         return Observable.error( throwable ); // (2)       }       return Observable.just(1); // (3)     } )  .subscribe();

>使用flatMap()可以将决策推迟到知道要处理的错误类型为止.
>返回的observable抛出所提供的错误或您想要更好地描述问题的其他内容.
>提供一个简单地执行onNext()的可观察对象,告诉retrywhen()运算符重新订阅原始的可观察对象.

总结

以上是内存溢出为你收集整理的android-RxJava:如何从flatMap运算符中的错误中恢复全部内容,希望文章能够帮你解决android-RxJava:如何从flatMap运算符中的错误中恢复所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1120537.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存