Retrofit添加Okhttp拦截器没用

Retrofit add Okhttp interceptor no use

我在添加拦截器时发现了一些奇怪的东西:

public ApiDefinition getService() {

        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(chain -> {
                    System.out.println("into interceptor");
                    Request request = chain.request();
                    return chain.proceed(request);
                })
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(UrlConfig.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(client)
                .build();
        return retrofit.create(ApiDefinition.class);
    }

然后当我调用网络时,没有任何打印,就像拦截器不起作用一样。

Observable observable = apiDefinition.getResponse();
observable.subscribe(....)

我很困惑,有什么不对吗?

apiDefinition.getResponse(); 你忘了 subscribe api 打电话。只是变得可观察,而不是观察它。

apiDefinition
        .getResponse()
        .subscribe(.......);

如果你想拦截网络请求调用并在logcat中打印它们 你可以通过添加这样的 HttpLoggingInterceptor 来做到这一点:

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            // set your desired log level
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(logging)
                    .build();

抱歉各位,我在使用 dagger2 注入 ApiDefinition 时犯了一些错误,所以已经解决了。