如何使用齐射库将JSONArray响应存储在高速缓存内存中?

时间:2014-03-28 10:35:13

标签: android json performance caching android-volley

我没有显示一些代码,因为我没有错误。我知道如何使用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);
}
}

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

1 个答案:

答案 0 :(得分:0)

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

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