Модернизация: простой способ извлечь тело ответа, если код ответа HTTP не 200/201.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Модернизация: простой способ извлечь тело ответа, если код ответа HTTP не 200/201.

Сообщение Anonymous »

Я использую Compose, Flows, Clean Arch, MVVM и шаблон репозитория.
Я не хочу создавать какие-либо общие классы. Я действительно просто хочу увидеть простые GET и POST, обрабатываемые с условиями загрузки, успеха или ошибки, и без необходимости копировать и вставлять, как обрабатывается исключение HTTP по всему коду. Когда я пытаюсь получить элемент errorBody() из Retrofit, API не возвращает тело. Вот мой код:

Код: Выделить всё

fun login(email: String, password: String) {
_loginState.update {
it.copy(isLoading = true)
}

//call api here
viewModelScope.launch {
authRepository.login(email, password).collectLatest { loginResponse ->

val responseCode = loginResponse.code()
if (loginResponse.isSuccessful) {
val token = loginResponse.body()?.access_token ?: ""
//val refreshToken = loginResponse.body()?.refresh_token ?: ""
Log.d("Token:", token)

localUserManager.saveAccessToken(token)
_loginState.update {
it.copy(isLoading = false, loginSuccessful = true, errorMessage = "")
}

} else {
val errorBody = loginResponse.errorBody().toString()
val message = try {
JSONObject(errorBody).get("reason")
} catch (e: JSONException) {
"Unknown API Error"
}
val errorMessage = "Error $responseCode: $message"

_loginState.update {
it.copy(
isLoading = false,
loginSuccessful = false,
errorMessage = errorMessage
)
}
}

}
}
Для успешного запроса я могу получить access_token из объекта Response. Если ответ имеет код состояния, отличный от 200/201, я не могу получить тело, возвращаемое API. Например, API возвращает этот ответ при неудачной попытке входа в систему с кодом состояния 401.

Код: Выделить всё

{
"reason": "You entered an invalid email or password.",
"success": false
}
Как я могу получить доступ к полю «причина» из API, если код состояния — 401? Что я не так понимаю?

Подробнее здесь: https://stackoverflow.com/questions/790 ... is-non-200
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»