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

2024-03-01

我找不到这个问题的更新答案。我正在使用 Volley 向 Web API 发送请求。它返回 JSON。我正在使用如下所示的缓存功能,但我想确保列表视图经常刷新(现在假设为 30 分钟)。如何使该给定 URL 的缓存无效,以便我的应用程序自动处理该 URL(无需刷新按钮)。这question https://stackoverflow.com/questions/17230431/google-volley-when-to-use-cache-remove-and-cache-invalidate有助于指出无效和删除之间的区别。

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

要刷新列表视图,您可以使用 volley服务器日期获取最初收到响应的日期

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

这个返回日期时间很长。 并在您的代码中使用分钟差异函数作为

  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 分钟,它将使缓存失效。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Volley,使缓存无效并每 (x) 分钟发出新请求 的相关文章

随机推荐

  • jQuery .toggleClass() 速度

    我使用 jQuery toggleClass 函数 类将在每次点击时切换 效果完美 但我无法设置速度 我已经尝试过 databox toggleClass boxopened 7000 还有这个 databox toggleClass bo
  • Jenkins:Gerrit 触发器问题的设置

    我在 Jenkins 上安装了插件 Gerrit Trigger 因为当团队中的开发人员在存储库上推送某些内容 相对于特定项目 时 我需要自动启动构建 我按照这里的设置 https wiki jenkins ci org display J
  • 迭代对象的嵌套数组,查找 id 并更新与 id 匹配的对象

    我的输入如下 它是一个对象数组 每个对象都有状态 这也是一个对象数组 我想追加details当状态 id 与状态匹配时 在 states 对象内部id如以下所说的 IE 82175746 const input country id 877
  • Storyboard 中的 UIViewController Title 属性

    I am setting the title field of a UIViewController via Interface Builder Storyboard 该视图控制器嵌套在UINavigationController它又嵌套在
  • 使用 EF 在两个数据库之间复制记录

    我需要使用 EF 将数据从一个数据库复制到另一个数据库 例如 我有以下表关系 Forms gt FormVersions gt FormLayouts 我们在两个数据库中都有不同的表单 我们希望将它们收集到一个数据库中 基本上 我想从一个数
  • putback() 和 unget() 之间的区别

    我正在使用标准 iostream 从文件中获取一些输入 但我很困惑unget versus putback character 从文档中我看来这些功能实际上是相同的 其中unget 只记得输入的角色 所以我很紧张 我一直用putback c
  • Hazelcast 服务器作为 Linux 服务

    如何在生产环境中将 hazelcast 服务器作为 Linux 服务运行 java server cp hazelcast jar com hazelcast examples StartServer StartServer 运行服务器并输
  • 根据列名列表将数据表拆分为多个数据表

    我有一个如下所示的数据表 ID Country Supplier 515 DE A 515 CH A 515 FR A 516 DE B 516 FR B 517 DE C 517 IT C 我有一个List
  • PhantomJS 使用 QtWebKit 还是 Blink?

    PhantomJS CasperJS 是否使用 WebKit 或 Chromium 作为默认浏览器驱动程序 如果是WebKit 是直接WebKit还是qt或者gtk PhantomJS 基于 QtWebKit 常见问题解答说 问 Phant
  • 使用react和mapbox gl或maplibre gl动态加载标记

    我正在学习 React 我想显示一张地图 在该地图上动态显示和隐藏标记 这有效 我用Maplibre GL https github com maplibre maplibre gl js 这是一个分叉地图盒 GL https docs m
  • 如何解释函数实例的bind/>>>=?

    我正在努力提高我的理解Applicatives and Monad通过在 Javascript 中实现其函数实例来实现 我对 Haskell 的了解有限 我希望我的问题有意义 这是我的实现fmap lt gt and gt gt 为了Fun
  • malloc(0) 有什么意义?

    我刚看到这个code https github com mxcl scrobsub blob 2ad2f6131e5900d4c62d8c5bcdb15c069f17e3bd scrobsub c L94 artist char mallo
  • 类 PhpStorm_Codeception_ReportPrinter 不存在

    我尝试在 PhpStorm 中运行 Codeception 功能测试 但不断收到一条错误 提示缺少类 我在互联网上搜索过 除了一篇文章之外 没有发现任何可以解决这个问题的方法https intellij support jetbrains
  • 无法加载文件或程序集“System.Net.Http”

    在我的构建输出的诊断视图中显示了此冲突 System Net Http Version 4 0 0 0 Culture neutral PublicKeyToken b03f5f7f11d50a3a 和 System Net Http Ve
  • 使用 CSS Grid 时如何使内容居中并使背景覆盖整列?

    当我添加这段代码时 place items center 我的元素居中 但只有文本应用了背景颜色 当我删除此代码时 place items center 背景颜色覆盖整个列 但文本不再居中 main display grid grid te
  • 如何找出浏览器实际使用的网站图标

    我有一个新网站 其中包含使用源文件自动生成的一组图标图像真实网站图标生成器 http realfavicongenerator net 并且有 9 个苹果图标 1 Android 图标 3 个命名图标 1 Safari 固定SVG 1 js
  • 在 Wayland 和 X11 上模拟鼠标和键盘输入

    我正在对用 C 编写的 OpenGL 应用程序进行小型验收测试 到目前为止 我只能截取屏幕截图 还没有找到在 Wayland 和 X11 上模拟鼠标和键盘输入的方法 关于如何在 Wayland X11 中操作特定窗口的事件流有什么建议吗 用
  • *这*真的是从 Java 代码启动第二个 JVM 的最佳方式吗?

    这是我的后续自己之前的问题 https stackoverflow com questions 1218790 我有点不好意思问这个 但是无论如何 如何以独立于系统的方式从独立的 Java 程序启动第二个 JVM 并且无需依赖诸如 JAVA
  • Core Data 属性更改为 nil(与 ARC 相关?)

    我有一些核心数据功能 在最近进行一些 看似不相关的 更改之前一直运行良好 现在我遇到问题 属于特定 NSManagedObject 子类实例的所有属性突然返回 nil 假设我的 NSManagedObject 子类名为 Foo 它只有一个名
  • Android Volley,使缓存无效并每 (x) 分钟发出新请求

    我找不到这个问题的更新答案 我正在使用 Volley 向 Web API 发送请求 它返回 JSON 我正在使用如下所示的缓存功能 但我想确保列表视图经常刷新 现在假设为 30 分钟 如何使该给定 URL 的缓存无效 以便我的应用程序自动处