使用RXJava按顺序进行调用

时间:2017-03-01 14:03:39

标签: android rx-java rx-java2

我需要在用户启动应用程序时显示来自我的数据库的数据(它们立即可用),然后,我需要在网络可用时立即将它们替换为来自网络的数据。

我试过这样做:

mDisposable = mRepository.getHighlights(forceReload)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableObserver<PaginatedData<List<Article>>>() {
            @Override
            public void onNext(PaginatedData<List<Article>> articles) {
                mView.updateData(articles.getData(), articles.isFirstPage(), articles.isLastPage());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {
            }
        });

getHighlights()方法:

return Observable.concat(getHighlightsFromDataBase(), getHighlightsFromNetwork()).map(new Function<List<ArticleResponse>, PaginatedData<List<ArticleResponse>>>() {
            @Override
            public PaginatedData<List<ArticleResponse>> apply(@NonNull List<ArticleResponse> articleResponses) throws Exception {
                // ...
            }
        });

问题是当getHighlightsFromDataBase()和getHighlightsFromNetwork()完成时,它只调用“apply()”(在“map”方法中)。

所以没有这个订单:

getHighlightsFromDataBase()
getHighlightsFromNetwork()
map()
onNext()
map()
onNext()

我需要:

getHighlightsFromDataBase()
map()
onNext()
getHighlightsFromNetwork()
map()
onNext()

我正在谈论的“onNext”是调用getHighlights(); 的方法的onNext(这样我每次获得新数据时都可以更新视图)。

我能做些什么来实现这个目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

这样的东西?

    getHighlightsFromDataBase().map().doOnNext() {      
      getHighlightsFromNetwork().map().onNext()
    }