我正在努力创造一个好的连锁店。我认为这个问题很受欢迎,并且有人问过,但我还没有找到。
所以我想要的是去数据库,如果我内心没有任何内容,我想从服务器下载信息。
以下是代码:
() -> loadPriceListFromDatabase.call(null)
.flatMap(mealTypes -> {
if (mealTypes.size() != 0 ) {
return Observable.just(mealTypes); //here is the place where I'm not sure about code style.
}
return loadPriceList.call(null)
.map(model -> {
preferences.setPriceListDate(model.getDate().getTime());
return ActiveAndroidHelper.saveMeals(model);
});
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
MainActivity::onTestLoaded,
BaseActivity::onError
那我该怎么做呢?任何必须使用示例?
UPD
如果\ else阻止,我想把我想要的任何条件放在里面。
if (mealTypes.size() != 0 ) {
不仅是零或零。 例如我可以说
if (date == currentDate) { (//where date is timestamp
答案 0 :(得分:1)
它很简单:
Observable.concat(
databaseObservable.filter(databaseItem -> databaseItem.date == currentDate) ,
networkObservable
).take(1).subscribe(...)
除非您的databaseObservable在没有onNext的情况下完成,否则它不会订阅networkObservable。
答案 1 :(得分:0)
使用 swtichIfEmpty 运算符,如果您的observable自动为空,您可以在管道中提供一个新的。
检查此示例
@Test
public void testSwitchPerson() {
Observable.just(new ArrayList<>())
.flatMap(persons -> Observable.from(persons)
.switchIfEmpty(Observable.just(new Person("new", 0, "no_sex"))))
.subscribe(System.out::println);
}
如果您想查看更多实用示例,请点击此处https://github.com/politrons/reactive