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 …
- Retrofit: parámetros de consulta múltiples en el comando @GET?
- El edificio con maven falla
- Cambiar ConnectionTimeout de Retrofit OkHttpClient en tiempo de ejecución
- RoboSpice con Gson y Realm
- Obtención de datos del caché antes de ejecutar una solicitud de red con RoboSpice
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; } }
- ¿Cómo aumentar el tiempo de espera para las solicitudes de reacondicionamiento en robospice android?
- ¿Puedo usar SpiceManager dentro de un servicio?
- RoboSpice y Jsoup
- ¿Cómo se genera la clase con T y List <T>
- Subir una imagen a Google appengine utilizando Robospice con Retrofit
- Guardando colección extranjera en ORMLite con Robospice y Scala
- RoboSpice y ORMLite - Acceso a los datos
- ¿Cómo puedo obtener Robospice para tratar cualquier cosa que no sea una respuesta 200 de Retrofit & OKHttp como un error
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.
- Deteniendo texto de división a varias líneas en los períodos en direcciones web
- Los marcadores se mueven al realizar el zoom con Google Maps Android API v2