Android 如何使用RxJava';s concat()运算符?
我试图用DanLew描述的将Realm与RxJava和改型结合使用的方式来使用Realm,但如果我将Realm添加到链中,它就会被卡住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))
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)