关于Retrofit2的两种拦截器

拦截器的主要作用在于显示网络传输的数据,在调试的时候,方便我们查看上传以及服务器返回的内容。
据我所知,Retrofit2有两种拦截器:
1、Interceptor
这个拦截器的**优点**在于,你可以从回调中获取你所需要的部分内容,然后自定义输出。**缺点**在于无法获取传输的内容,以及返回的内容。
2、HttpLoggingInterceptor
这个拦截器的**优点**在于你可以获取到所有的内容,然后输出。**缺点**是你无法自定义地选择你所需要的部分。

使用方法:
1、Interceptor
步骤1:实现 Interceptor 类,并重写 intercept 方法;
步骤2:在intercept方法中,通过chain参数可以获取到你需要的部分内容。
步骤3:添加到OKHttpClient中。

代码图片:
关于Retrofit2的两种拦截器_第1张图片

代码:

public class MyIntercepter implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Log.i("TEST", "MyIntercepter.intercept.request.toString -> " + request.toString());
        Log.i("TEST", String.format(Locale.getDefault(),
                "MyIntercepter.intercept.requestbody -> {contentType : %1$s, contentLength : %2$d, toString : %3$s}",
                request.body().contentType().toString(),
                request.body().contentLength(),
                request.body().toString()));
        Response response = chain.proceed(request);

        Log.i("TEST", "MyIntercepter.intercept.response.message -> " + response.message());
        Log.i("TEST", "MyIntercepter.intercept.response.toString -> " + response.toString());

        // 在这里不能通过这个来获取服务器返回的内容,否则会报错
        // response.body().string();
        return response;
    }
}


、、、、、、、、、、

OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new MyIntercepter()) // 这个可以自定义打印内容,但是无法打印服务器返回的内容
                .build();

运行结果:
运行结果

2、HttpLoggingInterceptor
步骤一:添加依赖 ‘com.squareup.okhttp3:logging-interceptor:3.8.1’
步骤二:生成一个HttpLoggingInterceptor对象,并生成一个HttpLoggingInterceptor.Logger对象作为参数传进去;
步骤三:设置Level为HttpLoggingInterceptor.Level.BODY(最大权限);
步骤四:重写log方法,直接把返回的String message打印出来;
步骤五:添加到OKHttpClient中。

代码图片:
关于Retrofit2的两种拦截器_第2张图片

代码:

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
    @Override
    public void log(String message) {
        Log.i("TEST", "ApiServiceHelper.createApiService().HttpLoggingInterceptor.log().message -> " + message);
    }
});
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

、、、、、

OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor) // 这个会全部打印出来
                .build();

结果:
关于Retrofit2的两种拦截器_第3张图片

你可能感兴趣的:(retrofit2,拦截器)