禁用Volley缓存管理

34

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

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

任何建议都感谢。


请问您实现了哪些Volley缓存的替代方案?您是使用SQLLite还是AndroidORM?或者您只是将它们写入自己的文件中?谢谢 :) - Unknownweirdo
3个回答

84

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

request.setShouldCache(false);
myQueue.add(request);
如果您有自己的Request类实现,那么您可以在该类的构造函数中调用setShouldCache(false)
此解决方案会为每个请求单独禁用缓存。 如果您想从volley库全局禁用缓存,则可以在Request类中永久将mShouldCache变量设置为false。

1
我直接将其添加到我的自定义请求中。谢谢。 - Juampa
1
当你说全局禁用它时,是指将Volley的源代码作为项目的一部分,并将mShouldCache设置为false?还是通过其他方式实现? - TypingPanda
@TypingPanda 我的意思是更改Volley库中的变量。原因是:您可能有自己的多个Request类实现。如果您想禁用它们所有的缓存,这样做会更省时间。否则,如果您不想更改库中的任何内容,则可以在每个实现中调用setShouldCache(false)。 - Hungry Coder
嗨,我尝试在自定义请求类的构造函数中调用setShouldCache,但我真的不知道该如何做,请有人帮帮我吗? - thib sig
谢谢,它节省了很多时间。 - Randhir Kumar

14
您可以从构造函数创建RequestQueue,并将NoCache对象作为第一个参数传递。第二个参数是基于您选择的AndroidHttpClientHttpURLConnection的网络传输。
RequestQueue queue = new RequestQueue(new NoCache(), new BasicNetwork(new HurlStack()));

要了解更多详细信息,请查看此文档

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


9
request.setShouldCache(false);

似乎不足以处理GET请求。然而,在将请求添加到队列之前清除缓存似乎有所帮助。

myRequestQueue.getCache().clear();

在我的Volley单例中的getRequestQueue()方法中,我在返回队列之前添加了这一行代码。


以前从来没有遇到过这样的问题。感谢您的回答。所有东西都被缓存了,在返回队列之前清除缓存有所帮助。 - Abir Hasan Shawon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接