前言
前面介绍了怎么使用retrofit的使用,接下去简单介绍一下项目中经常用到的,为网络层添加一个拦截器。拦截器的作用可以对每一个网络请求添加一些通用的query参数或者添加header。这样做的好处是可以减少重复的劳动,不用每个接口都定义query参数。
定义拦截器
- 添加query参数
public class RequestIntercept implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
HttpUrl httpUrl = request.url().newBuilder()
.addQueryParameter("a", "yc")
.build();
request = request.newBuilder().url(httpUrl).build();
return chain.proceed(request);
}
}
定义一个拦截器实现Interceptor
接口并且实现intercept
方法。
首先是通过传入的Chain
对象获取Request
实例进而获取HttpUrl
对象。通过Builder
对象调用addQueryParameter
方法添加query参数。
- 添加header
public class RequestIntercept implements Interceptor {
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request request = chain.request().newBuilder()
.addHeader("token", "yc")
.build();
return chain.proceed(request);
}
}
配置Retrofit
- 创建Client实例添加拦截器
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new RequestIntercept())
.build();
- 为Retrofit配置Client
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.apiopen.top")
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.build();
网友评论