Excepción de interceptor de registro de actualización
Estoy tratando de habilitar el registro con Retrofit, pero estoy recibiendo esta excepción:
07-13 12:44:53.278 28698-29248/com.xxxx.debug E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher Process: com.xxxx.debug, PID: 28698 java.lang.NoSuchMethodError: No virtual method log(Ljava/lang/String;)V in class Lokhttp3/internal/Platform; or its super classes (declaration of 'okhttp3.internal.Platform' appears in /data/data/com.xxxx.debug/files/instant-run/dex/slice-realm-optional-api_16b022358933b490d810e358ea76b13cd4d88163-classes.dex) at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:109) at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:157) at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) at com.xxxx.api.RetrofitClient$1.intercept(RetrofitClient.java:59) at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) at okhttp3.RealCall.access$100(RealCall.java:30) at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127) at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 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)
Y así es como lo hago:
- ¿Gradle falló con Facebook SDK, Fresco lib y Retrofit?
- Retrofit 2 no puede cargar un archivo con dos parámetros adicionales de cadena separados
- Detectar si la respuesta OkHttp proviene de caché (con Retrofit)
- Error al cargar un archivo con Retrofit 2
- Retrofit 2 - Parámetro de consulta de URL
public class RetrofitClient { private static MyService instance; public static MyService getInstance(Context context) { if (instance == null) { instance = newInstance(context); } return instance; } private static MyService newInstance(Context context) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(context.getString(R.string.base_url)) .addConverterFactory(GsonConverterFactory.create()) .client(getClient()) .build(); return retrofit.create(MyService.class); } @NonNull private static OkHttpClient getClient() { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient.Builder httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .header("api-key", "...") .header("version-app", "-") .header("platform", "android") .header("version", "-") .header("device", "-") .method(original.method(), original.body()) .build(); Response response = chain.proceed(request);// <-- CRASH return response; } }) .addInterceptor(interceptor); return httpClient.build(); } }
He intentado agregar solamente un interceptor pero todavía estropeando. Estoy utilizando estas dependencias:
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
¿Qué estoy haciendo mal aquí?
EDIT: Bueno, esto es vergonzoso … el problema se resolvió. No he cambiado nada, estoy revisando todos mis compromisos y tanto RetrofitClient
como build.gradle
no han cambiado. El problema, por lo tanto, no estaba relacionado con dependencias o versiones gradle.
¡Afortunadamente alguien lanzará algo de luz sobre esta excepción!
- ¿Cómo podemos manejar diferentes tipos de respuesta con Retrofit 2?
- ¿Cómo usar AutoValue con Retrofit 2?
- Retrofit 2 @path Vs @query
- Cómo enviar JSON OBJECT como parámetro en Retrofit 2 (Android)
- Retrofit 2 no envía datos cuando ProGuard está habilitado
- Android: pasar dinámicamente la clase del modelo a retroalimentar la devolución de llamada
- Retrofit 2 (en Android) después de la implementación, ¿Dónde están mis elementos JSON?
- Retrofit 2.0 archivo de múltiples partes que envía sendto falló: ETIMEDOUT (conexión agotada) error
Retrofit 2.1.0 se basa en OkHttp 3.3.0, por lo que utilizaría la misma versión para el interceptor de registro (que es parte de OkHttp):
compile 'com.squareup.okhttp3:logging-interceptor:3.3.0'
¿Puedes intentar agregar la siguiente dependencia
compile 'com.squareup.okhttp3:okhttp:3.4.1'
Y avísame si hay algún progreso
También puede consultar este enlace .
En mi caso, este par de dependencias resolvieron el problema:
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
De todos modos, el problema está en la consistencia de la dependencia …
- Cómo ejecutar cordova plugin en el servicio de fondo de Android?
- La aplicación se bloquea al iniciar Debido a java.lang.IllegalArgumentException: la columna '_id' no existe