OKHttp LoggingInterceptor的使用

习惯了日志跟踪代码的日子,使用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


OKHttp LoggingInterceptor的使用_第1张图片
Retrofit配置MyApp.okHtpClient

运行结果:


OKHttp LoggingInterceptor的使用_第2张图片
查看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

你可能感兴趣的:(OKHttp LoggingInterceptor的使用)