Android排球请求是否自动缓存?

时间:2014-05-27 07:20:46

标签: android caching android-volley

我已经按照了一些教程,如果您想使用缓存结果进行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)..

所以我基本上都在问这是否是默认行为。

谢谢

1 个答案:

答案 0 :(得分:15)

是的,除非setShouldCache设置为false,否则Volley会缓存每个回复。

但是,它是根据响应的 HTTP缓存标头执行的操作。这意味着如果没有缓存标头,或者它们已过期,则JSON响应(或任何响应)将 NOT 缓存。

setShouldCache默认为true,因此您无需手动将其设置为true。它实际上用于明确要求不缓存的响应。

此外,您正在查看的教程是错误的。您无需手动与Volley的缓存进行交互。 Volley自动完成。