Android 開發 框架系列 OkHttp攔截器

前言

  此篇博客只講解okhttp的攔截器功能的詳細使用,若是你還不太瞭解okhttp能夠參考我另一篇博客 Android 開發 框架系列 OkHttp使用詳解html

添加Interceptor的簡單例子

Android 開發 框架系列 OkHttp使用詳解 能夠了解到okhttp的基本使用,初始化OkHttpClient的時候咱們能夠添加攔截器,以下:java

// 配置一些信息進入OkHttpClient
mOkHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(REQUEST_TIME, TimeUnit.SECONDS)
                .readTimeout(REQUEST_TIME, TimeUnit.SECONDS)
                .writeTimeout(REQUEST_TIME, TimeUnit.SECONDS)
                .addInterceptor(new ())
                .build();MyInterceptor

如上代碼,很簡單,只要利用addInterceptor方法就能夠添加攔截器,而自定義的攔截器只須要實現Interceptor接口就好了,以下所示:json

public class MyInterceptor implements Interceptor {
      ...
}

 在有簡單的瞭解後,咱們來說解攔截器的一些使用情景.網絡

修改header頭部信息

在一些接口須要增長頭部信息或者修改頭部信息的時候,若是咱們直接對Request請求裏增長頭部字段不免會有增長耦合的問題.而在攔截器裏修改就能夠避免嚴重的耦合,以下代碼增長了Body的類型與token信息.app

public class HttpHeaderInterceptor implements Interceptor {
        private String token;

        public HttpHeaderInterceptor(String token) {
            this.token = token;
        }

        @Override
        public Response intercept(@NonNull Chain chain) throws IOException {
            //  配置請求頭
            String accessToken = "token";
            Request.Builder builder = chain.request().newBuilder();
            builder.header("Content-Type", "application/json") //增長body類型
                    .header("Accept", "application/json");
            builder.header(accessToken, token); //增長token
            Request request = builder.build();
            return chain.proceed(request); //繼續發送
        }
    }

攔截取消請求

public class HttpHeaderInterceptor implements Interceptor {
        private String token;

        public HttpHeaderInterceptor(String token) {
            this.token = token;
        }

        @Override
        public Response intercept(@NonNull Chain chain) throws IOException {
            //  配置請求頭
            if (TextUtils.isEmpty(token)){
                chain.call().cancel();
                return null;
            }
            //略......
        }
    }

網絡日誌攔截

請注意! 若是你OkHttpClient須要用於下載文件請不要添加網絡日誌攔截,不然會影響流的回調框架

使用okhttp網絡日誌攔截器需添加如下依賴:

ide

implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'


定義攔截器中的網絡日誌工具:

工具

 HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { Log.d("logInterceptor", message); } }); logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); //設置攔截器,不要忘記設置日誌的級別,不然會不回調數據


初始化OkHttpClient,並添加網絡日誌攔截器:
post

mOkHttpClient = new OkHttpClient.Builder() .addInterceptor(logInterceptor) //設置攔截器 .build();
相關文章
相關標籤/搜索