RxJava链到数据库和服务器

时间:2016-08-18 07:33:38

标签: android rx-java rx-android

我正在努力创造一个好的连锁店。我认为这个问题很受欢迎,并且有人问过,但我还没有找到。

所以我想要的是去数据库,如果我内心没有任何内容,我想从服务器下载信息。

以下是代码:

() -> 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

2 个答案:

答案 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