RoboSpice lanzando excepciones okhttp

Yo uso RoboSpice-Retrofit para llamar a mi servidor REST api que ha estado trabajando sin problemas hasta hace unos días cuando cada llamada ahora lanza una excepción, por ejemplo:

D/Retrofit: java.lang.NoSuchMethodError: No direct method <init>(Lcom/squareup/okhttp/OkHttpClient;Lcom/squareup/okhttp/Request;ZZZLcom/squareup/okhttp/Connection;Lcom/squareup/okhttp/internal/http/RouteSelector;Lcom/squareup/okhttp/internal/http/RetryableSink;Lcom/squareup/okhttp/Response;)V in class Lcom/squareup/okhttp/internal/http/HttpEngine; or its super classes (declaration of 'com.squareup.okhttp.internal.http.HttpEngine' appears in /data/app/com.company.app.customerapp-1/base.apk) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.newHttpEngine(HttpURLConnectionImpl.java:362) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.initHttpEngine(HttpURLConnectionImpl.java:312) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:377) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) at java.lang.reflect.Proxy.invoke(Proxy.java:393) at $Proxy0.getTest(Unknown Source) at com.adoperator.tidyapp.TestActivity$TestRequest.loadDataFromNetwork(TestActivity.java:67) at com.adoperator.tidyapp.TestActivity$TestRequest.loadDataFromNetwork(TestActivity.java:54) at com.octo.android.robospice.request.CachedSpiceRequest.loadDataFromNetwork(CachedSpiceRequest.java:48) at com.octo.android.robospice.request.DefaultRequestRunner.processRequest(DefaultRequestRunner.java:150) at com.octo.android.robospice.request.DefaultRequestRunner$1.run(DefaultRequestRunner.java:217) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) D/Retrofit: ---- END ERROR 

Dependencias:

 compile 'com.octo.android.robospice:robospice:1.4.14' compile 'com.octo.android.robospice:robospice-cache:1.4.14' compile 'com.octo.android.robospice:robospice-retrofit:1.4.14' 

Sospecho basado en la excepción de que hay algo mal con el compilador, pero acabo de probar en otro equipo con una nueva instalación de Java y Android Studio en el mismo proyecto, pero los mismos problemas todavía …

Este error me está volviendo loco …

¿Alguien sabe algo que podría ser de ayuda? Cualquier ayuda es muy apreciada.

EDITAR

MainActivity.java:

 SpiceManager spiceManager = new SpiceManager(TestAPIService.class); protected void onStart() { super.onStart(); spiceManager.start(this); spiceManager.execute(new TestRequest(), new RequestListener<ResponseData>() { ... }); } 

TestAPIService.java:

 public class TestAPIService extends RetrofitGsonSpiceService { @Override public void onCreate() { super.onCreate(); addRetrofitInterface(TestAPI.class); } @Override protected String getServerUrl() { return "http://192.168.0.2"; } } 

TestAPI.java:

 public interface TestAPI { @GET("/test") ResponseData getTest(); } 

TestRequest.java:

 public class TestRequest extends RetrofitSpiceRequest<ResponseData, TestAPI> { public TestRequest() { super(ResponseData.class, TestAPI.class); } @Override public ResponseData loadDataFromNetwork() throws Exception { ResponseData response; try { response = getService().getTest(); } catch (Exception e) { e.printStackTrace(); throw e; } return response; } } 

El NoSuchMethodError está sucediendo porque HttpURLConnectionImpl está intentando invocar un constructor en HttpEngine que no está definido. Ahora su proyecto depende de:

 com.octo.android.robospice:robospice-retrofit:1.4.14 

Depende de :

 com.squareup.retrofit:retrofit:1.6.1 

Que depende de ambos:

 com.squareup.okhttp:okhttp:2.0.0 

y

 com.squareup.okhttp:okhttp-urlconnection:2.0.0 

A partir de la versión 2.0.0 , HttpURLConnectionImpl está en el módulo okhttp-urlconnection y HttpEngine está en el módulo okhttp . La parte retrofit.client.UrlConnectionClient de su traza de pila coincide correctamente con la retrofit:1.6.1 com.squareup.okhttp.internal.huc.HttpURLConnectionImpl retrofit:1.6.1 , pero la parte com.squareup.okhttp.internal.huc.HttpURLConnectionImpl no coincide con okhttp-urlconnection:2.0.0 ; okhttp-urlconnection:2.4.0 . El constructor que se queja de NoSuchMethodError está definido en okhttp:2.4.0 , por lo que significa que hay un HttpEngine diferente en su classpath, muy probablemente a partir de una versión diferente de okhttp que está siendo arrastrado por una dependencia transitiva. Debe poder solucionar el problema especificando las siguientes dependencias:

 compile('com.squareup.okhttp:okhttp:2.0.0') { force = true } compile('com.squareup.okhttp:okhttp-urlconnection:2.0.0') { force = true } 

Si eso no funciona por cualquier razón, la solución a su problema seguirá siendo obtener sus versiones de okhttp y okhttp-urlconnection sincronizadas y en una versión que sea compatible con su versión de retrofit . Declare las dependencias similares a las anteriores, encuentre las jarras que contienen HttpURLConnectionImpl y HttpEngine , averigüe cómo se están incorporando a su compilación y use exclusiones para deshacerse de las dependencias transitivas problemáticas.

  • Robospice en el contexto android.os.Service
  • Android: cómo recuperar el objeto JSON en caso de una excepción con RoboSpice
  • Primavera Android Vs Retrofit
  • Retrofit / Robospice: ¿Obtener los encabezados de respuesta de una solicitud exitosa?
  • Borrar datos antiguos de caché con robospice ormlite
  • ¿Cómo usar Mockito para probar las API a lo largo de Robospice y Retrofit?
  • Uso de RoboSpice con Jackson2 y Spring
  • Detener un proceso de fondo en robospice
  • ¿Cómo conectarse a una solicitud pendiente con RoboSpice (Splash> Actividad principal)?
  • Objeto de almacenamiento Robospice que extiende ArrayList en la base de datos a través de Ormlite
  • No hay ningún error de este tipo al usar robospice-retrofit y getstream.io
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.