Come viene gestita l’errore in Retrofit 2? Non riesco a trovare la class RetrofitError suggerita dalla maggior parte delle soluzioni?

Voglio implementare un meccanismo di gestione degli errori usando Retorfit 2.

Le soluzioni disponibili utilizzano la class RetrofitError che non riesco a trovare nel repository corrente.

Se stai facendo una richiesta sincrona, definisci il tuo metodo di richiesta nell’interfaccia come Call> .

Una volta eseguita la richiesta, riceverai risposta e dati deserializzati avvolti nella Response come Response> . Questo pacchetto ti dà accesso a intestazioni, codici http e corpo della risposta grezza.

Puoi accedere al corpo dell’errore come:

  Call> carsCall = carInterface.loadCars(); try { Response> carsResponse = carsCall.execute(); } catch (IOException e) { e.printStackTrace(); //network Exception is throw here } if(carsResponse != null && !carsResponse.isSuccess() && carsReponse.errorBody() != null){ // handle carsResponse.errorBody() } 

Per le chiamate asincrone, si riceve Throwable , se viene generata un’eccezione I / O durante la chiamata di rete:

 Call> call = service.loadCars(); call.enqueue(new Callback>() { @Override public void onResponse(Response> response) { // Get result from response.body(), headers, status codes, etc } @Override public void onFailure(Throwable t) { //handle error } }); 
 Call> call = MyService.loadData(); call.enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> 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> call, Throwable t) { if (t instanceof IOException){ //Add your code for displaying no network connection error } }); 

Il metodo semplice:

 int code = response.raw().code(); String message = response.raw().message();