我已经按照了一些教程,如果您想使用缓存结果进行HTTP调用,请特别展示如下操作。
Cache cache = MyApplication.getInstance().getRequestQueue().getCache();
Cache.Entry entry = cache.get(url);
if (entry != null) {
// means there is a cached result, to use it we have to do something like this...
new JSONObject(new String(entry.data, "UTF-8"))
} else {
// no cached result found so make the full request
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//stuff
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//stuff
}
});
// Adding request to request queue
MyApplication.getInstance().addToRequestQueue(jsonObjReq, TAG);}
我的印象是默认行为是缓存结果,并自动检索缓存结果,而不显式获取缓存条目 - 即。 entry = cache.get(url)..
所以我基本上都在问这是否是默认行为。
谢谢
答案 0 :(得分:15)
是的,除非setShouldCache
设置为false
,否则Volley会缓存每个回复。
但是,它是根据响应的 HTTP缓存标头执行的操作。这意味着如果没有缓存标头,或者它们已过期,则JSON响应(或任何响应)将 NOT 缓存。
setShouldCache
默认为true
,因此您无需手动将其设置为true
。它实际上用于明确要求不缓存的响应。
此外,您正在查看的教程是错误的。您无需手动与Volley的缓存进行交互。 Volley自动完成。