#android #android-studio #kotlin #retrofit2
#Android #android-studio #kotlin #модернизация 2
Вопрос:
Я использую Retrofit
для отправки некоторых запросов к API, и когда я получаю ответ, он обычно поступает от API в этом формате, если запрос выполнен успешно
Успешный ответ
{
"success": 1,
"error": [],
"data": [
// Some data..
]
}
И если есть ошибка, ответ будет выглядеть следующим образом
Неудачный ответ
{
"success": 0,
"error": [
"Password is incorrect"
],
"data": []
}
Проблема теперь в том, что в случае неудачного запроса он приходит error code 403
, поэтому Retrofit классифицирует его как исключение и выдает HttpException
, тогда у меня нет способа перехватить password is incorrect
сообщение, прикрепленное к json
ответу.
Есть ли какой-либо способ, которым я все еще могу получить ответ тела, даже если есть HttpException?
Обновить
Это пример кода, который я использую
ViewModel
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
Ответ №1:
Что ж, я нашел способ вернуть ответ от переданного исключения.
Как я уже сказал в вопросе, это код, который я использую
Старый пример кода
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
// Log the error
}
}
Однако я не знал, что тело ответа передается с исключением, и вы можете получить его в виде строки errorBody()
, используя следующий метод.
Новый пример кода
viewModelScope.launch {
try {
val result = myApi.request(requestParam)
}catch (e: HttpException){
val response = e.response()?.errorBody()?.string()
}
}
И оттуда вы можете манипулировать этой строкой, чтобы извлечь сообщение об ошибке.