操作一个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来添加。