Как выполняется обработка ошибок в Retrofit 2? Я не могу найти класс RetrofitError, который предлагает большинство решений?

Я хочу реализовать механизм обработки ошибок с помощью Retorfit 2.

Доступные решения включают класс RetrofitError, который я не могу найти в текущем репо.

Solutions Collecting From Web of "Как выполняется обработка ошибок в Retrofit 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 , если во время сетевого вызова 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();