android – RxJava的.debounce()干扰了我的Observable的线程和错误处理

android – RxJava的.debounce()干扰了我的Observable的线程和错误处理,第1张

概述我想在我的 Android应用程序中进行标准搜索,我在其中键入EditText,等待用户完成输入,然后使用Retrofit启动网络请求: // make observable out of EditTextObservable<OnTextChangeEvent> textObs = WidgetObservable.text(searchText);mSearchResultSubscri 我想在我的 Android应用程序中进行标准搜索,我在其中键入EditText,等待用户完成输入,然后使用Retrofit启动网络请求:
// 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的线程和错误处理所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存