将一个Flowable的结果与另一个

时间:2017-12-27 16:48:26

标签: android rx-java2

我有一个Timeline屏幕,其中显示了用户的帖子列表。

我从网络服务中获取这些帖子,然后将它们保存到数据库表中。我将RoomSQLite一起用作本地数据源。

由于Room适用于RxJava,我只是将帖子列表作为Flowable<List<Post>>返回。

我使用的代码是:

@Override
public Flowable<List<Post>> loadData() {
    if (networkUtils.isOnline()) {
        disposables.add(
                localDataSource.getLastStoredId()
                        .flatMap(s -> remoteDataSource.getPosts(s))
                        .doOnNext(postItemList -> {
                            if (postItemList != null) {
                                localDataSource.savePost(postItemList);
                            }

                        })
                        .map(postItemList -> {
                            List<Post> postList = new ArrayList<>();
                            for (PostItem postItem : postItemList) {
                                postList.add(mapper.from(postItem));
                            }
                            return postList;
                        })
                        .subscribeOn(schedulerProvider.io())
                        .observeOn(schedulerProvider.mainThread())
                        .subscribe(
                                posts -> { },
                                throwable -> {}));

    }

    return localDataSource.getPostsSorted();
}

这种方法的唯一问题是:我需要在用户刚刚创建帐户时显示特定视图,并且没有任何数据。所以这真的意味着:a)表&#34;帖子&#34;是空的b)我刚刚提出网络请求,而且在回复中没有任何数据。

是否有可以用于此类情况的运营商,或者是否有其他方式来实施此要求?

编辑:zip()运算符不是针对这种情况而且我对combineLatest()不确定,但即使它有效,我也不知道如何编写代码,因为那里&# 39; s还检查网络状态,而不是一个Flowable返回一个项目列表,而另一个只是订阅,这意味着我将有一个嵌套订阅。或者我应该如何组合它们并在disposables变量中添加一个以便我可以清除订阅?

0 个答案:

没有答案