2014-10-11 34 views
3

我正在处理一个应用程序,用户可以更改他的个人资料图片,这些图片实际上存储在服务器中,如下所示:http://serveraddress.com/user-pictures/user_id,问题在于即使用户更改了个人资料图像(它上传到服务器),缓存的图像正在显示,而不是“更新”的图像。如何使用Volley从缓存中移除图像?

我试图从缓存中删除图像,也使图像URL无效(因为它是相同的),但它不起作用。

getRequestQueue().getCache().invalidate("http://serveraddress.com/user-pictures/122432", true); //invalidate 
mLRUCache.remove("http://serveraddress.com/user-pictures/122432"); 

我很感激任何建议。 在此先感谢。

+0

你是如何要求图像? ImageLoader的? NetWorkImage? ImageRequest? – mmlooloo 2014-10-11 07:37:09

+0

我正在做这样的事情:'mProfilePicture.setImageUrl(“http://serveraddress.com/user-pictures/122432”,mImageLoader);' – kevinkl3 2014-10-11 19:33:24

+0

我有完全相同的问题。开始赏金,或者你知道吗? – Brandon 2016-04-22 22:24:44

回答

0

我遇到了同样的问题。经过大量研究后,我发现排列在磁盘上缓存图像的方式取决于HTTP缓存头。如果缓存标题表示图像仍然有效,则不会再从服务器请求该图像。由于您正在存储的新图像具有相同的名称,因此排除不会从服务器请求图像。所以,我应用了这个简单的逻辑:

可以说,最初你的图片路径是xxx.pic.jpg。

获得一个随机数,从任意随机数发生器函数中获得x。简单地将x添加到您的个人资料图片路径中,即您图片的新路径将为:xxx.pic.x.jpg。它应该解决问题:)