Sto cercando di capire il modo corretto di gestire gli errori nelle chiamate sincrone di Retrofit. So per le chiamate asincrone, Retrofit ha una callback per il caso di errore. Ma come devo gestire l'errore per la chiamata sincrona? La mia ipotesi è di avvolgere la chiamata con un blocco try e gestire l'eccezione RetrofitError nel blocco catch.Gestione degli errori nella chiamata sincrona da Retrofit
risposta
vostra congettura sembra corretto, utilizzando le chiamate sincrone Retrofit è fatto per gettare un RetrofitError che rappresenta l'errore: Reference. Si noti che il throw IllegalStateException
in handleError
non dovrebbe accadere nel caso di una chiamata sincrona.
Edit: Sembra Retrofit si sta lentamente spostando verso la versione 2.0, se si pensa di utilizzare Retrofit 2.0, vi consiglio di leggere la documentazione per vedere come è fatto nella nuova versione.
Modifica pt2: La modifica è passata alla versione 2.0 e ora se si desidera gestire gli errori non è più necessario rilevare RetrofitErrors ma IOException. Si può avere direttamente uno sguardo alla realizzazione di Execute()
/**
* Synchronously send the request and return its response.
*
* @throws IOException if a problem occurred talking to the server.
* @throws RuntimeException (and subclasses) if an unexpected error occurs creating the request
* or decoding the response.
*/
Response<T> execute() throws IOException;
Altri riferimenti: 1
È difficile trovarlo. Nessuno parla davvero della gestione degli errori nelle chiamate sincrone. Ma ho trovato qualcosa. Io non sono del tutto sicuro se la riga successiva dovrebbe essere aggiunto (dovrebbe sicuramente essere aggiunto per errori personalizzati, ma non è questo il caso) ho trovato here
Foo doFoo() throws RetroFitError;
La chiamata sincrona dovrebbe accadere all'interno di una prova clausola catch in questo modo:
try{
doFoo();
}catch(RetroFitError e){
}
Trovato here
Ciao Kevin, grazie per la tua risposta. In base alla fonte https://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit/RestAdapter.java#L182 e https://github.com/square/retrofit/blob/ master/retrofit/src/main/java/retrofit/ErrorHandler.java esiste già un gestore predefinito che genera RetrofitError. Quindi, se non abbiamo bisogno di gestire l'errore personalizzato, non è necessario generare il RetrofitError in modo specifico. –
@feiqu Ohh okay. Quindi puoi lasciarlo. Il metodo try catch sarà quindi il gestore degli errori;) –
- 1. Retrofit e gestione degli errori centralizzata
- 2. Operatori di gestione degli errori Retrofit 2 e RxJava
- 3. Gestione degli errori da HttpWebRequest.GetResponse
- 4. Gestione degli errori ActiveResource
- 5. Refit.ApiException Gestione degli errori
- 6. Gestione degli errori durante una copia da
- 7. Errori di gestione in Retrofit 2 RX
- 8. Gestione degli errori in jQuery.getScript
- 9. Gestione degli errori $ http: distinguere l'utente offline da altri errori
- 10. Metodologia di gestione degli errori
- 11. Gestione degli errori in addPersistentStoreWithType
- 12. promise.try vs promise.resolve gestione degli errori
- 13. Best practice Gestione degli errori
- 14. Gestione degli errori in SQLAlchemy
- 15. Gestione degli errori in mutazioni
- 16. Gestione degli errori in SwingWorker
- 17. Gestione degli errori con PHPMailer
- 18. PhantomJS la gestione degli errori
- 19. Gestione degli errori in MVC
- 20. pgp_sym_encrypt/pgp_sym_decrypt gestione degli errori
- 21. Gestione degli errori con Mongoose
- 22. Gestione degli errori in EventSource
- 23. Gestione degli errori più aggraziata nella libreria C++ - jsoncpp
- 24. Gestione degli errori Scala: Future For Comprensione
- 25. Gestione degli errori nel modello (MVC)
- 26. Gestione degli errori nelle chiamate getJSON
- 27. Gestione degli errori asincroni in swift 2
- 28. ASP.NET MVC Ajax Gestione degli errori
- 29. Monitoraggio/gestione degli errori sui server Web
- 30. Corretta gestione degli errori in ASP.NET MVC2
Perché vuoi utilizzare chiamata sincrona in retrofit? Le richieste HTTP devono essere inviate in modo asincrono in Android. –
@ piotr.wittchen a volte sei già in una discussione, quindi è perfettamente logico usare una chiamata sincrona –
Aggiungendo solo a ciò, penso che sia necessaria anche quando stai provando ad aggiornare un token in background dopo aver ricevuto 401 da il sever. –