package com.benyanyi.okhttp.config; import android.content.Context; import com.benyanyi.okhttp.util.InternetUtil; import org.jetbrains.annotations.NotNull; import java.io.IOException; import okhttp3.CacheControl; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; /** * @author YanYi * @date 2019-08-12 16:51 * @email ben@yanyi.red * @overview */ class CacheInterceptor implements Interceptor { private Context context; CacheInterceptor(Context context) { this.context = context; } @NotNull @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (InternetUtil.isNetWorkConnected(context)) { request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response response = chain.proceed(request); if (!InternetUtil.isNetWorkConnected(context)) { int maxAge = 0 * 60; // 有网络时 设置缓存超时时间0个小时 response.newBuilder() .header("Cache-Control", "public, max-age=" + maxAge) .removeHeader("Pragma")// 清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效 .build(); } else { // 无网络时,设置超时为4周 int maxStale = 60 * 60 * 24 * 28; // val maxStale = 0 response.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) .removeHeader("Pragma") .build(); } return response; } }