Есть ли способ получить модель данных в ветке onError? - PullRequest
0 голосов
/ 13 февраля 2019

Я получаю модель данных из API через Retrofit и RXJava.Модель содержит строку ошибки с пользовательским сообщением.

{"data":[],"errors":[{"code":168,"message":"Number is out of bounds"}]}

Функция подписки:

subscribe({
       eventLiveData.value = SubmitFinished
    }, { // it: Throwable!
       eventLiveData.value = SubmitResponseError
       // I want to have my object here!
    })

Можно ли как-нибудь добавить мой объект с кодом ошибки в ветку onError?Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

Да, onError вы получаете Throwable объект, и вы можете привести его к HttpException

data class Data(
    @SerializedName("content") val content: String
)

data class Error(
    @SerializedName("code") val code: Int,
    @SerializedName("message") val message: String,
)

data class Response(
    @SerializedName("data") val data: List<Data>,
    @SerializedName("errors") val errors: List<Error>
)

fun onError(e: Throwable): List<Error>? {
    return try {
        val httpException = e as? HttpException
        val errors = JSONObject(httpException?.response()?.errorBody()?.string()).get("errors") as List<Error>
    } catch (ignore: Exception) {
        null
    }
}

Проверить эту статью:

https://medium.com/mindorks/rxjava2-and-retrofit2-error-handling-on-a-single-place-8daf720d42d6

...