package com.xiaomai.geek.data.net.client; import android.app.Application; import com.xiaomai.geek.common.utils.NetworkUtil; import java.io.File; import java.io.IOException; import javax.inject.Inject; import okhttp3.Cache; import okhttp3.CacheControl; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by XiaoMai on 2017/4/24. */ public class CacheHttpClient extends BaseOkHttpClient { private static final long CACHE_SIZE = 1024 * 1024 * 100; @Inject Application mContext; @Inject public CacheHttpClient() { } @Override public OkHttpClient.Builder customize(OkHttpClient.Builder builder) { File cacheFile = new File(mContext.getCacheDir(), "git_hub"); Cache cache = new Cache(cacheFile, CACHE_SIZE); builder.cache(cache); builder.addNetworkInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // Add FORCE_CACHE cache control for each request if network is not available. if (!NetworkUtil.isNetworkAvailable(mContext)) { request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response originalResponse = chain.proceed(request); if (NetworkUtil.isNetworkAvailable(mContext)) { String cacheControl = request.cacheControl().toString(); // Add cache control header for response same as request's while network is available. return originalResponse.newBuilder() .header("Cache-Control", cacheControl) .build(); } else { // Add cache control header for response to FORCE_CACHE while network is not available. return originalResponse.newBuilder() .header("Cache-Control", CacheControl.FORCE_CACHE.toString()) .build(); } } }); return builder; } }