Retrofit的使用(二)

2019-11-16  本文已影响0人  YC1995

前言

前面介绍了怎么使用retrofit的使用,接下去简单介绍一下项目中经常用到的,为网络层添加一个拦截器。拦截器的作用可以对每一个网络请求添加一些通用的query参数或者添加header。这样做的好处是可以减少重复的劳动,不用每个接口都定义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参数。

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

OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(new RequestIntercept())
                .build();
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://api.apiopen.top")
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient)
                .build();
上一篇下一篇

猜你喜欢

热点阅读