Android 如何使用RxJava';s concat()运算符?

Android 如何使用RxJava';s concat()运算符?,android,realm,rx-java,Android,Realm,Rx Java,我试图用DanLew描述的将Realm与RxJava和改型结合使用的方式来使用Realm,但如果我将Realm添加到链中,它就会被卡住 Observable.concat(countryStorage.restoreAsObservable(), networkService.api() .getCountries() .doOnNext(countryStorage::save))

我试图用DanLew描述的将Realm与RxJava和改型结合使用的方式来使用Realm,但如果我将Realm添加到链中,它就会被卡住

Observable.concat(countryStorage.restoreAsObservable(),
              networkService.api()
                  .getCountries()
                  .doOnNext(countryStorage::save))
              .first()
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(//never reaching here)
储藏

 @Override public Observable<List<Country>> restoreAsObservable() {
        Realm realm = realmProvider.get();
        return realm.where(Country.class)
            .findAll()
            .asObservable()
            .map(countries -> return realm.copyFromRealm(countries))
            .first(countries -> return !countries.isEmpty())
            .doOnCompleted(realm::close());
      }

之所以会发生这种情况,是因为
countryStorage.restoreAsObservable()
从未完成,如果您阅读文档,它会明确指出:

Concat等待订阅您传递给它的每个附加可观察对象,直到前一个可观察对象完成

相反,您可以执行以下操作:

    countryStorage.restoreAsObservable()
          .doOnSubscribe(() -> {
              networkService.api()
                  .getCountries()
                  .subscribe(countryStorage::save)
          })
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(//do smth)

github上也有同样的问题。我也有同样的问题。你找到解决方案了吗?
doOnCompleted
永远不会被调用。你确定,你的领域数据库中有一些国家/地区吗?如果没有,链仍然卡在第
行。首先(国家->返回!国家。isEmpty())
    countryStorage.restoreAsObservable()
          .doOnSubscribe(() -> {
              networkService.api()
                  .getCountries()
                  .subscribe(countryStorage::save)
          })
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(//do smth)