Я хочу реализовать механизм обработки ошибок с помощью Retorfit 2.
Доступные решения включают класс RetrofitError, который я не могу найти в текущем репо.
Я хочу реализовать механизм обработки ошибок с помощью Retorfit 2.
Доступные решения включают класс RetrofitError, который я не могу найти в текущем репо.
Если вы делаете синхронный запрос, вы определяете свой метод запроса в интерфейсе как Call<List<Car>>
.
После выполнения запроса вы получите ответ и десериализованные данные, завернутые в Response<T>
, как Response<List<Car>>
. Это завернутое дает вам доступ к заголовкам, http-кодам и сырому телу ответа.
Вы можете получить доступ к корпусу ошибки как:
Call<List<Car>> carsCall = carInterface.loadCars();
try {
Response<List<Car>> carsResponse = carsCall.execute();
} catch (IOException e) {
e.printStackTrace();
//network Exception is throw here
}
if(carsResponse != null && !carsResponse.isSuccess() && carsReponse.errorBody() != null){
// handle carsResponse.errorBody()
}
Для асинхронных вызовов вы получаете Throwable
, если во время сетевого вызова выбрано исключение ввода/вывода:
Call<List<Car>> call = service.loadCars();
call.enqueue(new Callback<List<Car>>() {
@Override
public void onResponse(Response<List<Car>> response) {
// Get result from response.body(), headers, status codes, etc
}
@Override
public void onFailure(Throwable t) {
//handle error
}
});
Call<List<data>> call = MyService.loadData();
call.enqueue(new Callback<List<data>>() {
@Override
public void onResponse(Call<List<data>> call, Response<List<data>> response) {
if (response.isSuccessful()) {
//Response success. Handle data here
}
else{
//For getting error message
Log.d("Error message",response.message());
//For getting error code. Code is integer value like 200,404 etc
Log.d("Error code",String.valueOf(response.code()));
}
}
@Override
public void onFailure(Call<List<data>> call, Throwable t) {
if (t instanceof IOException){
//Add your code for displaying no network connection error
}
});
Простой метод:
int code = response.raw().code();
String message = response.raw().message();