ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Volley,使缓存无效并每(x)分钟发出一次新请求

2019-10-29 11:27:33  阅读:199  来源: 互联网

标签:caching android-volley android


我找不到对此的更新答案.我正在使用Volley将请求发送到Web API.它返回JSON.我正在使用如下所示的缓存功能,但是我想确保列表视图经常刷新(例如现在为30分钟).如何使此给定URL的缓存无效,以使我的应用程序自动处理(没有刷新按钮). question有助于指出无效和删除之间的区别.

MainActivity.java

Cache cache = AppController.getInstance().getRequestQueue().getCache();
        Entry entry = cache.get(URL_FEED);
        if (entry != null) {
            // fetch the data from cache
            try {
                String data = new String(entry.data, "UTF-8");
                try {
                    parseJsonFeed(new JSONArray(data));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

        } else 
        {
            // making fresh volley request and getting json

            JsonArrayRequest getRequest = new JsonArrayRequest(URL_FEED,
                    new Response.Listener<JSONArray>()
                    {
                        @Override public void onResponse(JSONArray response) {
                            VolleyLog.d(TAG, "Response: " + response.toString());
                            if (response != null) {
                                parseJsonFeed(response);
                            }
                            Log.d("Response", response.toString());
                        }
                    },......ErrorListener

解决方法:

要刷新listview,可以使用volley的serverDate来获取最初以以下方式接收到响应的日期:

AppController.getInstance().getRequestQueue().getCache().get(url).serverDate

此返回日期时间很长.
并在您的代码中使用minutesdifference函数作为

  public static long getMinutesDifference(long timeStart,long timeStop){
            long diff = timeStop - timeStart;
            long diffMinutes = diff / (60 * 1000);

            return  diffMinutes;
        }

并在您的代码中将此函数称为

Calendar calendar = Calendar.getInstance();
long serverDate = AppController.getInstance().getRequestQueue().getCache().get(url).serverDate;
if(getMinutesDifference(serverDate, calendar.getTimeInMillis()) >=30){
   AppController.getInstance().getRequestQueue().getCache().invalidate(URL_FEED, true);
}

如果先前的URL响应> = 30分钟,它将使缓存无效.

此(无效)允许继续使用此数据,直到进行新的调用,并且缓存的响应被新的响应覆盖.

标签:caching,android-volley,android
来源: https://codeday.me/bug/20191029/1959642.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有