2
我實施了兩個存儲庫,以管理我的數據。所以,如果數據庫中沒有數據,它應該向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。查詢「實際上發出一個空列表或剛剛完成? – akarnokd
發出一個空列表。 –
我會問@akarnokd的答案是否正確,因爲這是找到我的解決方案的途徑。謝謝! –