【发布时间】:2016-05-31 12:37:07
【问题描述】:
我实现了两个存储库来管理我的数据。因此,如果数据库中没有数据,它应该向 API 询问它。我在其他帖子中看到这可以使用 switchIfEmpty 解决,但它对我不起作用。
我尝试了以下代码。 restApiFlavorRepository.query(specification) 行被调用,但从未通知订阅者。
public Observable query(Specification specification) {
final Observable observable = flavorDaoRepository.query(specification);
return observable.map(new Func1() {
@Override
public Observable<List<Flavor>> call(Object o) {
if(((ArrayList<Flavor>)o).isEmpty()) {
return restApiFlavorRepository.query(specification);
}
return null;
}
});
}
还有这个
public Observable query(Specification specification) {
final Observable observable = flavorDaoRepository.query(specification);
return observable.switchIfEmpty(restApiFlavorRepository.query(specification));
}
当我应该获得两种口味时,我仍然得到空列表。
更新
我要找的,是这个……
public Observable query(Specification specification) {
Observable<List<Plant>> query = mRepositories.get(0).query(specification);
List<Plant> list = new ArrayList<>();
query.subscribe(plants -> list.addAll(plants));
Observable<List<Plant>> observable = Observable.just(list);
return observable.map(v -> !v.isEmpty()).firstOrDefault(false)
.flatMap(exists -> exists
? observable
: mRepositories.get(1).query(null));
}
它就像魅力一样! :)
【问题讨论】:
-
flavorDaoRepository.query是真的发出一个空列表还是刚刚完成? -
发出一个空列表。
-
我会问@akarnokd 的答案是否正确,因为这是找到我的解决方案的途径。谢谢!