package com.doumee.lib_coremodel.http.interceptor; 
 | 
  
 | 
import android.content.Context; 
 | 
  
 | 
import com.doumee.lib_coremodel.http.utils.NetworkUtil; 
 | 
  
 | 
import java.io.IOException; 
 | 
  
 | 
import okhttp3.CacheControl; 
 | 
import okhttp3.Interceptor; 
 | 
import okhttp3.Request; 
 | 
import okhttp3.Response; 
 | 
  
 | 
/** 
 | 
 * Created by goldze on 2017/5/10. 
 | 
 * 无网络状态下智能读取缓存的拦截器 
 | 
 */ 
 | 
public class CacheInterceptor implements Interceptor { 
 | 
  
 | 
    private Context context; 
 | 
  
 | 
    public CacheInterceptor(Context context) { 
 | 
        this.context = context; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Response intercept(Chain chain) throws IOException { 
 | 
        Request request = chain.request(); 
 | 
        if (NetworkUtil.isNetworkAvailable(context)) { 
 | 
            Response response = chain.proceed(request); 
 | 
            // read from cache for 60 s 
 | 
            int maxAge = 60; 
 | 
            return response.newBuilder() 
 | 
                    .removeHeader("Pragma") 
 | 
                    .removeHeader("Cache-Control") 
 | 
                    .header("Cache-Control", "public, max-age=" + maxAge) 
 | 
                    .build(); 
 | 
        } else { 
 | 
            //读取缓存信息 
 | 
            request = request.newBuilder() 
 | 
                    .cacheControl(CacheControl.FORCE_CACHE) 
 | 
                    .build(); 
 | 
            Response response = chain.proceed(request); 
 | 
            //set cache times is 3 days 
 | 
            int maxStale = 60 * 60 * 24 * 3; 
 | 
            return response.newBuilder() 
 | 
                    .removeHeader("Pragma") 
 | 
                    .removeHeader("Cache-Control") 
 | 
                    .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) 
 | 
                    .build(); 
 | 
        } 
 | 
    } 
 | 
} 
 |