您的位置:首页 > 理论基础 > 计算机网络

Okhttp的缓存机制+拦截器

2017-12-20 19:39 381 查看
public class OkHttpUtils {

    private final int CACHE_SIZE = 10*1024*1024;

    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 volatile OkHttpUtils sInstance;

    private OkHttpClient mOkHttpClient;

    private OkHttpUtils() {

        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();

        //包含header、body数据

        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        //缓存文件夹

        File cacheFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ksoncache");

        if (!cacheFile.exists()){

            cacheFile.mkdirs();

        }

        mOkHttpClient = 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())

                //http数据log,日志中打印出HTTP请求&响应数据

                .addInterceptor(loggingInterceptor)

                //添加缓存路径

                .cache(new Cache(cacheFile, CACHE_SIZE))

                //添加响应头cache-control

                .addInterceptor(new MyInterceptor())

                .build();

    }

    public static OkHttpUtils getInstance() {

        if (sInstance == null) {

            synchronized (OkHttpUtils.class) {

                if (sInstance == null) {

                    sInstance = new OkHttpUtils();

                }

            }

        }

        return sInstance;

    }

    public OkHttpClient getOkHttpClient() {

        return mOkHttpClient;

    }

}

接下来是拦截器的实现

public class MyInterceptor implements Interceptor {

    @Override

    public Response intercept(Chain chain) throws IOException {

        Request request = chain.request();

        Response response = chain.proceed(request);

        String cacheControl = request.cacheControl().toString();

        return response.newBuilder()

                .header("Cache-Control", cacheControl)

                .removeHeader("Pragma")

                .build();

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: