我有一个Timeline
屏幕,其中显示了用户的帖子列表。
我从网络服务中获取这些帖子,然后将它们保存到数据库表中。我将Room
与SQLite
一起用作本地数据源。
由于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
变量中添加一个以便我可以清除订阅?