使用方法很简单:
1.首先进行先进行设置:
public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/json; charset=utf-8");//设置MediaType
private static final OkHttpClient client;
private static final long cacheSize = **;//缓存文件最大限制大小20M
private static String cachedirectory = FilePathroot + "/caches"; //设置缓存文件路径
private static Cache cache = new Cache(new File(cachedirectory), cacheSize); //
static {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(, TimeUnit.SECONDS); //设置连接超时时间
builder.writeTimeout(, TimeUnit.SECONDS);//设置写入超时时间
builder.readTimeout(, TimeUnit.SECONDS);//设置读取数据超时时间
builder.retryOnConnectionFailure(false);//设置不进行连接失败重试
builder.cache(cache);//这种缓存
client = builder.build();
}
注意的是:okhttp只会对get请求进行缓存,post请求是不会进行缓存,这也是有道理的,因为get请求的数据一般是比较持久的,而post一般是交互操作,没太大意义进行缓存。
2.进行get请求:
一般来说的是,我们get请求有时有不一样的需求,有时需要进行缓存,有时需要直接从网络获取,有时只获取缓存数据,这些处理,okhttp都有帮我们做了,我们做的只需要设置就是了。下面是整理的各种需求的设置与使用方法。
1.进行get请求,并将数据缓存。
/**
*@param url
*@param cache_maxAge_inseconds 缓存最大生存时间,单位为秒
*@return 当前call
*--------------------
*TODO get请求,并缓存请求数据,返回的是缓存数据,注意,如果超出了maxAge,缓存会被清除,回调onfail
*/
public static Call DoGetAndCache(String url,int cache_maxAge_inseconds) {
Request request = new Request.Builder()
.cacheControl(new CacheControl.Builder().maxAge(cache_maxAge_inseconds, TimeUnit.SECONDS).build())
.url(url).build();
Call call = client.newCall(request);
startrequest(call);
return call;
}
2.get请求,但只获取返回网络数据。
/**
* get请求 ,只获取返回网络请求数据,不进行缓存
*
* @param url
* @param responseListener
*/
public static Call DoGetOnlyNet(String url) {
Request request = new Request.Builder()
.cacheControl(new CacheControl.Builder().maxAge(, TimeUnit.SECONDS).build())
.url(url).build();
Call call = client.newCall(request);
startrequest(call);
return call;
}
3.进行get请求,并限制过时时间
/**
* get请求, 没有超过过时时间StaleTime的话,返回缓存数据,否则重新去获取网络数据,StaleTime限制了默认数据fresh时间
* @param url
* @param staletime 过时时间,秒为单位
*/
public static Call DoGetInStaleTime(String url, int staletime) {
Request request = new Request.Builder()
.cacheControl(new CacheControl.Builder().maxStale(staletime, TimeUnit.SECONDS).build()).url(url).build();
Call call = client.newCall(request);
startrequest( call);
return call;
}
这里说明下StaleTime与maxAge的区别。
StaleTime:指的是过时时间,设置它后,会将数据缓存,如果没有超过过时时间,说明数据还是新的,或直接拿缓存数据返回,如果超过是过时时间,那么我们认为数据过时了,它会去或者网络数据进行更新并返回,注意,它是不会删除缓存的。
maxAge:限制了缓存的生存时间,超过了就会删除该请求的缓存。
4.只获取返回缓存数据
/**
* get请求, 只使用缓存,注意,如果是超出了staletime或者超出了maxAge的话会返回504,否则就返回缓存数据
* @param url
*/
public static Call DoGetOnlyCache(String url) {
Request request = new Request.Builder()
.cacheControl(new CacheControl.Builder().onlyIfCached().build()).url(url).build();
Call call = client.newCall(request);
startrequest(call);
return call;
startrequest(Call call0):
private static void startrequest(final Call call0) {
try {
call0.enqueue(new Callback() {
@Override
public void onFailure(Call arg0, IOException arg1) {
//请求失败
}
@Override
public void onResponse(Call arg0, Response response) throws IOException {
//请求返回数据
}
});
} catch (Exception e) {
}
}