Manejo de errores personalizados con Retrofit cuando se ofusca usando proguard da java.lang.reflect.UndeclaredThrowableException

Han escrito el manejo de errores personalizado para la adaptación. El código funciona perfectamente cuando minifyEnabled false . Cuando habilito proguard, obtengo la siguiente excepción

 12-17 10:14:07.688 18568-19041/com.mobility.cariq.carscore W/System.err﹕ java.lang.reflect.UndeclaredThrowableException 12-17 10:14:07.688 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at $Proxy9.updatesForModel(Native Method) 12-17 10:14:07.688 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at com.mobility.cariq.carscore.rest.service.UpdateDatabaseService.jiijijliillliliilllil(UpdateDatabaseService.java:119) 12-17 10:14:07.688 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at com.mobility.cariq.carscore.rest.service.UpdateDatabaseService.onHandleIntent(UpdateDatabaseService.java:75) 12-17 10:14:07.689 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 12-17 10:14:07.689 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) 12-17 10:14:07.689 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at android.os.Looper.loop(Looper.java:136) 12-17 10:14:07.689 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at android.os.HandlerThread.run(HandlerThread.java:61) 12-17 10:14:07.689 18568-19041/com.mobility.cariq.carscore W/System.err﹕ Caused by: com.mobility.cariq.carscore.rest.error.UnauthorizedException 12-17 10:14:07.690 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at com.mobility.cariq.carscore.rest.error.RestErrorHandler.handleError(RestErrorHandler.java:40) 12-17 10:14:07.690 18568-19041/com.mobility.cariq.carscore W/System.err﹕ at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:242) 

Controlador de errores

 public class RestErrorHandler implements ErrorHandler { @Override public Throwable handleError(RetrofitError cause) { Response r = cause.getResponse(); if (r != null && r.getStatus() == 400) { try { RestError mRestError = (RestError) cause.getBodyAs(RestError.class); final String exception = mRestError.getMessages().get(0); return new UnauthorizedException(exception); } catch (Exception e) { e.printStackTrace(); LogUtility.NoteLog(e); } } return cause; } 

Proguard

 -obfuscationdictionary keywords.txt -classobfuscationdictionary keywords.txt -packageobfuscationdictionary keywords.txt -dontwarn android.telephony.** -keepattributes SourceFile,LineNumberTable -dontwarn butterknife.internal.** -keep class **$$ViewInjector { *; } -keepnames class * { @butterknife.InjectView *;} -keepattributes Signature -keepattributes *Annotation* -keep class com.squareup.okhttp.** { *; } -keep interface com.squareup.okhttp.** { *; } -dontwarn com.squareup.okhttp.** -dontwarn rx.** -dontwarn retrofit.** -keep class retrofit.** { *; } -keepclasseswithmembers class * { @retrofit.http.* <methods>; } -keep class sun.misc.Unsafe { *; } -keep class com.mobility.cariq.carscore.rest.model.** { *; } -keep class com.mobility.cariq.carscore.rest.error.** { *; } -dontwarn java.nio.file.** -dontwarn org.codehaus.mojo.** -dontwarn org.joda.convert.** 

Soy bastante nuevo en usar proguard y retrofit. Soy incapaz de entender, cómo manejar la excepción.

Proguard elimina atributos de excepción de forma predeterminada.

-keepattributes Exceptions se asegurarán de que su Throwable permanezca en su código después de la ofuscación.

Parece que UnauthorizedException es una excepción comprobada (se extiende desde Exception , no RuntimeException ) lo que significa que tiene que declarar una throws cláusula sobre todas sus interfaces de servicio.

 interface MyService { @GET("/") Something doSomething() throws UnauthorizedException; } 
  • Añadir cookies para la actualización de 2 solicitudes
  • OkHttp / tiempo de espera de retroactivación predeterminado
  • Retrofit, devolución de llamada para 204 No respuesta de contenido?
  • Actualizaciones de Android Retrofit 2.0
  • Renovar 2 verifica la URL de la llamada
  • Retrofit 2: Obtener el cuerpo de JSON from Response
  • Cómo utilizar OAuth 2.0 con Retrofit Android
  • Publicar campos en este formato con Retrofit
  • Detener un proceso de fondo en robospice
  • Cookie de sesión no es persistente en Retrofit Android
  • Renovación de la referencia $ ref de objeto deserializante de JSON a su copia original
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.