当只有新数据可用时,如何从网络加载

时间:2014-11-07 20:36:03

标签: android caching android-volley

我在一个项目中并使用凌空来解析来自互联网的数据。我已成功缓存数据并可从那里检索数据,如果缓存不可用,则通过以下代码从网络解析:

Cache cache = GlobalData.getInstance().getRequestQueue().getCache();
        Entry entry = cache
                .get("http://10.10.10.22/emaildata/getcurrentuser.php");
        if (entry != null) {
            try {
                String data = new String(entry.data, "UTF-8");
                JSONArray array = new JSONArray(data);
                setParsedValue(array);


            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {


            JsonArrayRequest jArrayRequest = new JsonArrayRequest(
                    "http://10.10.10.22/emaildata/getcurrentuser.php",
                    new Response.Listener<JSONArray>() {

                        @Override
                        public void onResponse(JSONArray array) {

                            setParsedValue(array);

                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // TODO Auto-generated method stub
                            Toast.makeText(getApplicationContext(),
                                    error.getMessage(), Toast.LENGTH_LONG)
                                    .show();

                        }
                    });

            GlobalData.getInstance().addToRequestQueue(jArrayRequest);

        }

现在我希望数据始终从缓存加载,直到该网络网址上有新数据为止,我在onPause();

上执行了以下操作
@Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        GlobalData
                .getInstance()
                .getRequestQueue()
                .getCache()
                .invalidate("http://10.10.10.22/emaildata/getcurrentuser.php",
                        true);
    }

有时它可以工作,但有时它不起作用,大多数时候我不得不重新启动设备以了解我想要的新数据,任何人都可以帮助如何立即获取数据更改以从网络解析或否则从缓存加载?

2 个答案:

答案 0 :(得分:0)

  

我在一个项目中并使用凌空来解析来自互联网的数据。我有   成功缓存了数据并可以从中检索数据   如果缓存不可用,则通过以下方式从网络解析   代码:

     

...

     

现在我希望数据始终从缓存加载到新的   数据在该网络网址上提供

     

...

     

任何人都可以帮助如何立即获取数据更改以从网络解析或从缓存加载吗?

只要服务器响应允许,就会自动完成上述所有任务,例如剂量不具有任何字段:

Cache-Control:no-cache|no-store

导致Volley无法存储响应。

你所要做的只是提出要求。如果它在他的缓存中并且它是有效的(max-age或ttl或......是正常的话),那么如果它已过期或者它无效则会为你返回它创建新请求。

答案 1 :(得分:-1)

如果您想确保始终从服务器获取新数据而不是本地缓存,则可以在网址调用中附加当前时间戳。这将确保Volley将您传递的URL视为唯一,因此它会向服务器发出请求。

e.g。

int time = (int) (System.currentTimeMillis());
JsonArrayRequest jArrayRequest = new JsonArrayRequest(
                "http://10.10.10.22/emaildata/getcurrentuser.php?time"