Ожидание ответа от второго Observable в RxJava2

90
19 января 2022, 16:20

У меня есть данные в локальной базе и данные с сервера. Я должен вывести сперва данные с локальной базы, если есть, иначе подождать данных от сервера. То есть, когда жду данных от сервера, я не должен скрывать 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 дня. Можете подсказать, как реализовать?

READ ALSO
Как прочитать объект из потока

Как прочитать объект из потока

Есть задание: Многопоточный клиент-сервер

116
Как собрать javaFx проект

Как собрать javaFx проект

когда достиг финальной части своего задания столкнулся с такой проблемой, что не могу собрать проект в полноценный jar файл, выдаёт ошибку...

88
Как объединить ArrayList из разных классов?

Как объединить ArrayList из разных классов?

У меня есть класс Company и 3 дочерних класса, которые наследуют методы из родительского класса, как получить 1 ArrayList со всеми значениями зарплат...

97