Я объединяю два наблюдаемых, чтобы сначала отображать данные из кеша и после этого запускать загрузку данных из сети и отображать обновленные данные.
Observable.concat(
getContentFromCache.subscribeOn(dbScheduler),
getContentFromNetwork.subscibeOn(networkScheduler)
).observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
Если нет сетевого подключения, второй наблюдаемый сбой сразу после вызова OnSubscribe.
В случае сбоя второго наблюдаемого немедленно теряются данные с первого наблюдаемого. Метод onNext никогда не вызывается в подписчике.
Я думаю, это может быть связано с следующим кодом в OperatorConcat.ConcatSubscriber
@Override
public void onNext(Observable<? extends T> t) {
queue.add(nl.next(t));
if (WIP_UPDATER.getAndIncrement(this) == 0) {
subscribeNext();
}
}
@Override
public void onError(Throwable e) {
child.onError(e);
unsubscribe();
}
Похоже, что после получения ошибки он отписывается, и все ожидающие onNext теряются.
Каков наилучший способ решить мою проблему?
Обновление
Похоже, я нашел решение, вместо того, чтобы устанавливать наблюдение для конкатенированных наблюдаемых, я устанавливаю для каждого наблюдаемого наблюдаемое.
Observable.concat(
getContentFromCache.subscribeOn(dbScheduler).observeOn(AndroidSchedulers.mainThread()),
getContentFromNetwork.subscibeOn(networkScheduler).observeOn(AndroidSchedulers.mainThread())
)
.subscribe(subscriber);