Retrofit配置headers無效的可能原因
操作一個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來新增。