如何在Android WebView中禁用缓存?

54

由于缓存的原因,即使没有互联网,我的安卓webview也会加载我的网页,因此我想在安卓webview中禁用缓存,有人可以帮助我如何做到这一点吗?

我正在使用以下代码行来设置我的webview,但仍然无法禁用缓存。

     myBrowser.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
     myBrowser.getSettings().setAppCacheEnabled(false); 
请给我建议,如果还有其他方法的话。

可能是重复的问题:Android Webview - 完全清除缓存 - Arda Yigithan Orhan
4个回答

66
请添加以下代码
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
请将应用程序从历史任务中删除并测试其工作情况。

运行得非常好!我之前遇到了一个问题,当用户按下“返回”并更新订单值时,支付网关无法更新金额。现在它可以正常工作了! - sud007
无法感谢你们的足够!浪费了太多时间在这上面了! - Hobbes the Tige
似乎setAppCacheEnabled现在已经被弃用了。有人知道它的替代方法吗? - Vélimir
1
@Sho 你好,如果问题仍然存在,请尝试这个 - https://stackoverflow.com/questions/62354423/how-to-use-serviceworkercontroller-on-android/63491172#63491172 这里还有来自javadoc的信息: 应用程序缓存API已被弃用,一旦在Chromium中删除支持,此方法将成为无操作。考虑改用Service Workers。有关更多信息,请参见https://web.dev/appcache-removal/。 - Inliner

35
在加载任何页面之前,创建WebView后,您可以清除缓存。 myBrowser.clearCache(true) - 布尔值表示是否您希望删除磁盘上的缓存文件。
如果您想深入了解,请参阅文档

我尝试了这个方法,而不是在SOF上寻找答案,虽然它是正确的,但是不幸的是对我没有用。@Piyush的回答可以解决我的问题。 - sud007
完美的解决方案! - BSQ

5

我也遇到了同样的问题。尽管我已经使用了以下两行代码,但我的webview仍然加载旧数据。

webview.getSettings().setAppCacheEnabled(false); webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

我的错误在于,在调用webview的loadUrl()之后,我才设置了这些缓存相关的设置。当我将这些缓存设置放在loadUrl()之前时,一切都按预期工作了。


0
 webView.clearCache(true)
 webView.clearHistory()
 webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE;

那个loadUrl方法之前的三种方法对我有用。别忘了清除应用存储或完全卸载应用来进行第一次测试。

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