Retrofit配置headers无效的可能原因

作者: Yet_land | 来源:发表于2018-09-30 11:01 被阅读18次

    操作一个Retrofit的步骤一般是这样的

    • 创建一个网络拦截器,添加一些通用的headers
    Interceptor interceptor = new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request original = chain.request();
                    Request request = original.newBuilder()
                            .addHeader("xxx", "xxx")
                            .addHeader("xxx", "xxx")
                            .addHeader("Content-Type", "application/json")
                            .method(original.method(), original.body())
                            .build();
                    return chain.proceed(request);
                }
            };
    
    • 创建一个打印请求日志的拦截器
    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(BuildConfig.DEBUG ? 
                    HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE);
    
    • 在OKHttpClient中加入创建的拦截器
    OkHttpClient okHttpClient= new OkHttpClient.Builder()
                    .addInterceptor(interceptor) // 添加headers拦截器
                    .addInterceptor(mHttpLoggingInterceptor)// 添加log拦截器
                    .readTimeout(8000, TimeUnit.MILLISECONDS)
                    .writeTimeout(8000, TimeUnit.MILLISECONDS)
                    .build();
    

    其实我们看上面的addInterceptor方法好像是并列的,至于哪个拦截器在前,哪个在后,应该无所谓。但是事实是,如果吧mHttpLoggingInterceptor放前面,则后面的interceptor添加的heanders将不会生效。当我们使用addInterceptor来添加网络拦截器时,一定要把网络拦截器放前面

    • 使用addNetworkInterceptor
      当我们使用网络请求方面的拦截器时,直接使用addNetworkInterceptor方法来添加,而不要使用addInterceptor来添加。

    相关文章

      网友评论

        本文标题:Retrofit配置headers无效的可能原因

        本文链接:https://www.haomeiwen.com/subject/uyzioftx.html