操作一個Retrofit的步驟一般是這樣的
- 創(chuàng)建一個網(wǎng)絡(luò)攔截器皆看,添加一些通用的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);
}
};
- 創(chuàng)建一個打印請求日志的攔截器
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(BuildConfig.DEBUG ?
HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE);
- 在OKHttpClient中加入創(chuàng)建的攔截器
OkHttpClient okHttpClient= new OkHttpClient.Builder()
.addInterceptor(interceptor) // 添加headers攔截器
.addInterceptor(mHttpLoggingInterceptor)// 添加log攔截器
.readTimeout(8000, TimeUnit.MILLISECONDS)
.writeTimeout(8000, TimeUnit.MILLISECONDS)
.build();
其實我們看上面的addInterceptor方法好像是并列的,至于哪個攔截器在前,哪個在后,應(yīng)該無所謂唠椭。但是事實是祭埂,如果吧mHttpLoggingInterceptor放前面,則后面的interceptor添加的heanders將不會生效卑惜。當我們使用addInterceptor來添加網(wǎng)絡(luò)攔截器時,一定要把網(wǎng)絡(luò)攔截器放前面驻售。
- 使用addNetworkInterceptor
當我們使用網(wǎng)絡(luò)請求方面的攔截器時露久,直接使用addNetworkInterceptor方法來添加,而不要使用addInterceptor來添加欺栗。