首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有刷新布局的rx-android (或rx-java)

带有刷新布局的rx-android (或rx-java)
EN

Stack Overflow用户
提问于 2015-09-18 12:53:55
回答 2查看 624关注 0票数 1

我使用了swiperefreshlayout android.support.v4.widget.SwipeRefreshLayout,并使用rxjava在每次滑动发生时向服务器查询。我的代码如下所示,我必须在OnRefreshListener中创建重复的observable和subscriber才能调用它们,由于代码重复,这看起来相当糟糕。如果我使用原始的(在外部声明),则永远不会返回订阅者(不会触发onNextonErroronCompleted )。在这种情况下,RxJava遗漏了什么?

代码语言:javascript
复制
Subscriber<ListVerifyResponseWrapper> subscriber = new Subscriber<ListVerifyResponseWrapper>() {
            @Override
            public void onCompleted() {
                LogUtils.LOGD(TAG, "completed");
            }

            @Override
            public void onError(Throwable e) {
                Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show();
                mSwipeRefreshLayout.setRefreshing(false);
            }

            @Override
            public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) {
                changeViewStateAccordingToResult(listVerifyResponseWrapper);

            }
        };


        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Observable<ListVerifyResponseWrapper> observableDuplicate = RestClient.getInstance().getRestApi().getListVerifyRequestDetail(model);

                final Subscriber<ListVerifyResponseWrapper> subscriberDuplicate = new Subscriber<ListVerifyResponseWrapper>() {
                    @Override
                    public void onCompleted() {
                        LogUtils.LOGD(TAG, "completed");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Toast.makeText(getActivity(), getString(R.string.An_error_has_occured), Toast.LENGTH_SHORT).show();
                        mSwipeRefreshLayout.setRefreshing(false);

                    }

                    @Override
                    public void onNext(ListVerifyResponseWrapper listVerifyResponseWrapper) {
                        changeViewStateAccordingToResult(listVerifyResponseWrapper);

                    }
                };

                observableDuplicate.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriberDuplicate);
            }
        });

        observable.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.newThread()).subscribe(subscriber);

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-10-22 05:21:16

我也遇到了同样的问题。我通过链接解决了这个问题

代码语言:javascript
复制
.observeOn(AndroidSchedulers.mainThread())

就在最后一个订阅者之前。显然,您必须确保有关UI的内容是在UI线程上完成的

票数 1
EN

Stack Overflow用户

发布于 2017-02-04 00:01:29

除了Johnnycube的答案(这是正确的)之外,我建议您使用

代码语言:javascript
复制
subscribeOn(Schedulers.io())

这意味着要处理回调,以及其他事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32644113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档