【问题标题】:Disable Volley cache management禁用 Volley 缓存管理
【发布时间】:2014-10-09 14:21:38
【问题描述】:

有没有办法可以禁用 Volley 缓存管理?我的应用程序使用 Google Volley 库来管理传输层,但我有自己的缓存管理器实现,因为服务器不使用 Cache-Control 标头。我想节省 Volley 缓存正在使用的空间,因为它完全没用。

有什么简单的方法吗?还是应该实现我自己的RequestQueue 版本?

任何建议表示赞赏。

【问题讨论】:

  • 如果您不介意我问,您实施了凌空缓存的替代方案吗?您使用的是 SQLLite 还是 AndroidORM?也许您只是将它们写入您自己的文件?谢谢:)

标签: android caching android-volley


【解决方案1】:

如果您使用任何在 volley 中实现的默认请求类(例如 StringRequest、JsonRequest 等),则在将请求对象添加到 volley RequestQueue 之前调用 setShouldCache(false)

request.setShouldCache(false);
myQueue.add(request);

如果你有自己的 Request 类的实现,那么你可以在你的类的构造函数中调用 setShouldCache(false)

此解决方案单独禁用每个请求的缓存。如果要从 volley 库中全局禁用缓存,可以在 Request 类中将 mShouldCache 变量永久设置为 false。

【讨论】:

  • 我直接将它添加到我的自定义请求中。谢谢。
  • 当您说全局禁用它时,您的意思是将 volley 的源代码作为您项目的一部分并将 mShouldCache 设置为 false?还是通过其他方式?
  • @TypingPanda 我的意思是,更改 volley 库中的变量。这样做的原因是:您可能有自己的 Request 类的多个实现。如果您想为所有这些禁用缓存,那么这样做会花费更少的时间。否则,如果您不想更改库中的任何内容,则可以在每个实现中调用 setShouldCache(false)。
  • 嗨,我试图在我的自定义请求类的构造函数中调用 setShouldCache 但我真的不知道该怎么做,有人可以帮我吗?
  • 感谢它节省了很多时间。
【解决方案2】:

您可以从构造函数创建 RequestQueue 并将 NoCache 对象作为第一个参数传递。第二个参数是基于您选择的AndroidHttpClientHttpURLConnection 的网络传输。

RequestQueue queue = new RequestQueue(new NoCache(), new BasicNetwork(new HurlStack()));

更多详情see this documentation

根据文档,BasicNetwork 是 Volley 的默认网络实现。

【讨论】:

    【解决方案3】:
    request.setShouldCache(false);
    

    似乎不足以满足 GET 请求。 但是,在添加到队列之前清除缓存似乎有帮助

    myRequestQueue.getCache().clear();
    

    我把它放在我的 Volley 单例中的 getRequestQueue() 方法中。在返回队列之前。

    【讨论】:

    • 从来没有遇到过这样的问题。谢谢你的回答。一切都被缓存了,在返回队列之前清除缓存有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2020-06-17
    • 2013-05-22
    • 2013-10-24
    • 2014-03-17
    • 2020-10-08
    相关资源
    最近更新 更多