У меня есть данные в локальной базе и данные с сервера. Я должен вывести сперва данные с локальной базы, если есть, иначе подождать данных от сервера. То есть, когда жду данных от сервера, я не должен скрывать ProgressBar до тех пор, пока не получу данных или пустой список и только потом скрывать ProgressBar и показать Empty State(сообщение о пустом списке).
Проблема в том, когда я получаю пустой список из локальной базы, ProgressBar скрывается и появляется Empty State, а потом подгружаются данные с сервера.
Код, где эта реализация:
Observable.mergeDelayError(getDataFromLocal(), getDataFromServer())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread(), true)
.subscribe(transactions -> {
if (mView != null) {
mView.hideConnectingProgress();
mView.onTransactionsReceived(transactions);
}
}, throwable -> {
if (mView != null) {
mView.hideConnectingProgress();
if (throwable instanceof UnknownHostException) {
mView.showOfflineMessage();
}
}
}
)
Попробовал добавить Флаг типа isLocalData = true в flatMap() getDataFromLocal(), а в flatMap() getDataFromServer() isLocalData = false.
В подписчике так:
if (transactions.size() > 0) {
mView.hideConnectingProgress();
mView.onTransactionsReceived(transactions);
} else {
if (!isLocalData) {
mView.hideConnectingProgress();
mView.onTransactionsReceived(transactions);
}
}
Но в этом решении Empty State не появляется при получении пустого списка из локальной базы, когда интернета нет.
Вопрос:
Как реализовать получение getDataFromLocal(), если тут пусто, то не скрывая ProgressBar ждать getDataFromServer(), но если нет интернета, показать Empty State getDataFromLocal().
Понимаю все запутанно, и я что-то не понимаю. Бьюсь с эти 2 дня. Можете подсказать, как реализовать?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости