【问题标题】:How to store JSONArray Response in cache memory with volley library?如何使用 volley 库将 JSONArray 响应存储在缓存中?
【发布时间】:2014-03-28 10:35:12
【问题描述】:

我没有显示一些代码,因为我没有错误。我知道如何使用 Volley 将 Bitmap / ImageView 存储在缓存中。我试图做同样的事情,但对于文本。我需要将我的 json 保存在缓存中。我从服务器下载我的 json。有用 !但是我需要做什么才能将它保存在缓存中?

这是返回我的 json 的函数:

    public void getJSONObjectFromServer(String url, Context context) {
    RequestQueue        myRequestQueue = Volley.newRequestQueue(context);
    final Map<String, String>   mapArray = new HashMap<String, String>();

    JsonArrayRequest myJsonArray = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {

        @Override
        public void onResponse(JSONArray response) {
            Log.i("ARRAY RESPONSE", response.toString());
            for (int i = 0; i < response.length(); i++) {
                try {
                    JSONObject myResult = response.getJSONObject(i);
                    Iterator<?> keys = myResult.keys();
                        while (keys.hasNext()) {
                            String keyDynamicValue = (String)keys.next();
                            String currentDynamicValue = myResult.getString(keyDynamicValue);
                            mapArray.put(keyDynamicValue, currentDynamicValue);
                            Log.i("[" + keyDynamicValue + "] =", currentDynamicValue);
                        }
                    Log.i("JSONOBJECT MYRESULT " + i, myResult.toString());     
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO Auto-generated method stub

        }
    });
    myRequestQueue.add(myJsonArray);
}
}

我搜索了多个链接,但它们都是为了存储位图。有人知道我该怎么做吗?谢谢!

【问题讨论】:

    标签: android json performance caching android-volley


    【解决方案1】:

    对于原始的volley,他们依靠http响应头(如Cache-Control,Date,Expires,ETag)来缓存,在客户端很难控制。根据我的经验,除了位图,文本响应实际上不需要缓存在内存中,因为它不需要像位图那样快速获取,因此无论是凌空还是我,我们都没有为常见请求提供缓存。我有一个名为Netroid的项目,它基于volley,在之前的版本中,我实现了将常见的基于文本的响应存储到内存缓存中,之后,我意识到常见的请求延迟是可以接受的,而不是位图延迟是没有的,所以我回滚到原始截击实现。

    我的项目比 volley 有更多的功能,你可以控制 DiskBaseCache 每个响应条目的过期时间,而不是依赖于响应头,以及更强大的执行状态回调,如 onCache()、onSuccess()、onFailure()、onFinish(),如果你喜欢的话我会很高兴的。

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2015-02-21
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多