为什么要用消息拦截器?
因为有时候接口不同在排错的时候 需要先从接口的响应中做分析。利用了消息拦截器可以清楚的看到接口返回的所有内容。不需要重新使用fildder等抓包工具来做分析。
1.添加依赖
//okhttp的log信息
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
2.在合适的位置初始化(这里放在了构造,因为是单例,响应的拦截器也只new一次)
private HttpMethod() {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
try {
String text = URLDecoder.decode(message, "utf-8");
Log.e("OKHttp-----", text);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
Log.e("OKHttp-----", message);
}
}
});
//这里可以builder(). 添加更多的内容 具体看需求
mClient = new OkHttpClient.Builder().addInterceptor(interceptor).build();
//这行必须加 不然默认不打印
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
}
3.在retrofit中设置httpclient
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//添加HttpClient
.client(mClient)
.build();
mApiService = retrofit.create(ApiService.class);
setlevel用来设置日志打印的级别,共包括了四个级别:NONE,BASIC,HEADER,BODY
BASEIC:请求/响应行
HEADER:请求/响应行 + 头
BODY:请求/响应航 + 头 + 体
以下是BODY级别的 打印的日志如下
image.png
网友评论