Rx Java Наблюдается при получении ошибок при извлечении элементов из базы данных, но все равно проходит через - PullRequest
1 голос
/ 14 апреля 2020

В моем приложении я получаю данные из API и, если при этом возникает ошибка, я хотел бы получить данные из базы данных, но также показать сообщение об ошибке на экране. Итак, как я думал об этом, так это что-то вроде onErrorResumeNext. Я могу получить данные из базы данных, используя это, но проблема в том, что onError тогда не вызывается, и я не могу показать сообщение об ошибке пользователю. Итак, мой код:

override fun getData(): Observable<List<MyData>> {
    return getDataFromApi().onErrorResumeNext(getDataFromDatabase())
}

Как я могу каким-то образом получить базу данных при ошибке и одновременно знать, что сообщение об ошибке должно отображаться?

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете изменить способ моделирования домена следующим образом:

sealed class Result {
    class Simple(data: List<MyData>) : Result()

    class HasError(data: List<MyData>, throwable: Throwable) : Result()
}

Тогда вы можете сделать:

fun getResult(): Observable<Result> {
    return getDataFromApi().map<Result> { Result.Simple(it) }
        .onErrorResumeNext { throwable ->
            getDataFromDatabase().map { myDataList ->
                Result.HasError(
                    myDataList,
                    throwable
                )
            }
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...