Я не хочу создавать какие-либо общие классы. Я действительно просто хочу увидеть простые 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
)
}
}
}
}
Код: Выделить всё
{
"reason": "You entered an invalid email or password.",
"success": false
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... is-non-200