微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想在我的 Android应用程序中进行标准搜索,我在其中键入EditText,等待用户完成输入,然后使用Retrofit启动网络请求:
// make observable out of EditText
Observable<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抛出错误.

原文地址:https://www.jb51.cc/android/309753.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐