Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用volley库将JSONArray响应存储在缓存中?_Android_Json_Performance_Caching_Android Volley - Fatal编程技术网

Android 如何使用volley库将JSONArray响应存储在缓存中?

Android 如何使用volley库将JSONArray响应存储在缓存中?,android,json,performance,caching,android-volley,Android,Json,Performance,Caching,Android Volley,我没有显示一些代码,因为我没有错误。我知道如何使用Volley在缓存中存储位图/ImageView。我也试着这么做,只是为了文字。我需要将json保存在缓存中。我从服务器下载json。它起作用了!但是我需要做什么才能把它保存在缓存中呢 以下是返回json的函数: public void getJSONObjectFromServer(String url, Context context) { RequestQueue myRequestQueue = Volley

我没有显示一些代码,因为我没有错误。我知道如何使用Volley在缓存中存储位图/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);
}
}
public void getJSONObjectFromServer(字符串url,上下文){
RequestQueue myRequestQueue=Volley.newRequestQueue(上下文);
final Map mapArray=新HashMap();
JsonArrayRequest myJsonArray=newjsonarrayrequest(url,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
Log.i(“数组响应”,RESPONSE.toString());
对于(int i=0;i

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

对于原始版本,它们依赖http响应头(如缓存控制、日期、过期、ETag)进行缓存,在客户端很难控制。根据我的经验,除了位图,文本响应实际上不需要缓存在内存中,因为它不需要像位图那样快速获取,因此无论是volley还是我,我们都没有为普通请求提供缓存。我有一个项目调用,它基于volley,在以前的版本中,我实现了将基于文本的公共响应存储到内存缓存中,之后,我意识到公共请求延迟是可以接受的,而不是位图延迟,所以我回滚到原来的volley实现

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