// make observable out of EditTextObservable<OnTextChangeEvent> textObs = WidgetObservable.text(searchText);mSearchResultSubscription = textObs // wait until user has not typed for 350 milliseconds .debounce(350,TimeUnit.MILliSECONDS) // get the string the user typed .map(OnTextChangeEvent::text) .map(CharSequence::toString) // start a new observable (from Retrofit) .flatMap( q -> // try network call and return my data MyRetrofitAPI.getService().search(q) // if this fails,just return empty observable .onErrorResumeNext(error -> { Log.e("Error from retrofit: " + error.getLocalizedMessage()); return Observable.empty(); }) ) // if all is well,show the contents on the screen somehow .observeOn(AndroIDSchedulers.mainThread()) .subscribe(a -> { mAdapter.setItems(a); },error -> { Log.e("Also error in outer observable: " + error.getLocalizedMessage()); } );
现在,我有一个测试服务器,它接受改进调用并返回一个列表.当我输入’crash’时,服务器执行一些无效的代码和错误,返回http状态代码500,以及一些错误HTML.因此,改装调用失败了.
我认为外部的Observable链不应该受此影响.请参阅我之前的问题:In RxJava,how to retry/resume on error,instead of completing the observable
但是,外部Observable也有错误,导致链终止.错误是:
当前线程必须有一个弯针!
奇怪.现在我尝试没有.debounce()并且同样的事情发生,服务器有一个内部错误,但外部Observable没有错误.
那么.debounce()它对导致这种行为的线程有什么影响呢?我该如何解决它?
解决方法 添加到 pturner’s answer,可以将调度程序作为传递.debounce(400,TimeUnit.MILliSECONDS,AndroIDSchedulers.mainThread())
这将导致观察者在AndroID的主线程(UI线程)上工作,并将阻止Observer抛出错误.
总结以上是内存溢出为你收集整理的android – RxJava的.debounce()干扰了我的Observable的线程和错误处理全部内容,希望文章能够帮你解决android – RxJava的.debounce()干扰了我的Observable的线程和错误处理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)