改造日志拦截器异常 [英] Retrofit logging interceptor exception

查看:127
本文介绍了改造日志拦截器异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试启用翻新记录功能,但出现此异常:

I am trying to enable Logging with Retrofit but I am getting this exception:

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)

这就是我的做法:

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();
    }
}

我尝试仅添加一个拦截器,但仍然崩溃.我正在使用此依赖项:

I have tried adding only one interceptor but still crashing. I am using this dependencies:

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'

我在做什么错了?

编辑:这真令人尴尬……问题得以解决.我什么都没做,我正在修改所有提交,并且 RetrofitClient build.gradle 都没有改变.因此,该问题与gradle依赖项或版本无关.

Well this is embarrassing... the problem solved itself. I changed nothing, I am revising all my commits and both RetrofitClient and build.gradle haven't changed. The problem, therefore, was not related to gradle dependencies or versions.

幸运的是有人会对此例外有所启发!

Luckily someone will cast some light on this exception!

推荐答案

Retrofit 2.1.0依赖于OkHttp 3.3.0,因此我将使用相同版本的Logging Interceptor(它是OkHttp的一部分):

Retrofit 2.1.0 relies on OkHttp 3.3.0, so I would use the same version for the Logging Interceptor (which is part of OkHttp):

compile 'com.squareup.okhttp3:logging-interceptor:3.3.0'

这篇关于改造日志拦截器异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆