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;
}
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();
}
}