OKHttp LoggingInterceptor的使用
2019-05-18 本文已影响0人
惟吾德馨_慧
习惯了日志跟踪代码的日子,使用Okhttp3+Retrofit2+Rxjava2网络请求框架后,智能在网络请求后打印请求结果,而要查看调用的API链接似乎不那么方便。好在OkHttp提供了LoggingInterceptor,LoggingInterceptor就能跟踪到一个网络请求的所有状态,包括请求头、请求体、响应行、 响应体,可以说很方便了。
那么怎么使用呢?
第一步:build.gradle添加依赖库
//网络请求 okhttp3
compile 'com.squareup.okhttp3:okhttp:3.9.1'
//日志的拦截器
compile 'com.squareup.okhttp3:logging-interceptor:3.9.1'
compile 'com.squareup.okhttp3:mockwebserver:3.9.1'
//Facebook强大的监测工具
compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
第二步:新建OkHttpLogger.java
private static final String TAG = "OkHttpLogger";
public static final long DEFAULT_READ_TIMEOUT_MILLIS = 15 * 1000;
public static final long DEFAULT_WRITE_TIMEOUT_MILLIS = 20 * 1000;
public static final long DEFAULT_CONNECT_TIMEOUT_MILLIS = 20 * 1000;
private static final long HTTP_RESPONSE_DISK_CACHE_MAX_SIZE = 10 * 1024 * 1024;
private static volatile OkHttpLogger instance;
private OkHttpClient okHttpClient;
初始化OkHttpClient,设置HttpLoggingInterceptor:
HttpLoggingInterceptor interceptor =
new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
try {
Log.i(TAG, message);
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, message);
}
}
});
//包含header、body数据
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// setlevel用来设置日志打印的级别,共包括了四个级别:NONE,BASIC,HEADER,BODY
// BASEIC:请求/响应行
// HEADER:请求/响应行 + 头
// BODY:请求/响应行 + 头 + 体
okHttpClient = new OkHttpClient.Builder()
.readTimeout(DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.writeTimeout(DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.connectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
//FaceBook 网络调试器,可在Chrome调试网络请求,查看SharePreferences,数据库等
.addNetworkInterceptor(new StethoInterceptor())
.addInterceptor(interceptor).build();
为避免多个实例造成占用内存,这里使用单例
public static OkHttpLogger getInstance() {
if (instance == null) {
synchronized (OkHttpLogger.class) {
if (instance == null) {
instance = new OkHttpLogger();
}
}
}
return instance;
}
/**
* 获取OkHttpClient
* @return
*/
public OkHttpClient getOkHttpClient() {
return okHttpClient;
}
第三步:取用OkHttpClient,使用其中的LoggingInterceptor
在Application中获取,设置为静态变量,供APP随时调用,这里我的Application名为MyApp.java。
public static OkHttpClient okHtpClient;
//获取okHtpClient,使用log拦截器
okHtpClient = OkHttpLogger.getInstance().getOkHttpClient();
//初始化FaceBook调试器,可在Chrome调试网络请求,查看SharePreferences,数据库等
Stetho.initializeWithDefaults(this);
在初始化Retrofit时配置MyApp.okHtpClient
Retrofit配置MyApp.okHtpClient
运行结果:
查看log
很简单吧,LoggingInterceptor日志拦截分享完毕!谢谢您的浏览,如有更好的意见,多多指正。每天进步一点点(190518)
上一篇:MVP+Okhttp3+Retrofit2+Rxjava2 框架初实现:https://www.jianshu.com/p/3625061c98ad
下一篇:EventBus3.0简单使用 :https://www.jianshu.com/p/5ad5ea7180a2
我的更多学习分享:https://www.jianshu.com/u/57ab9a74e2c0