101种清除WebView缓存的方法 - 所有这些都不起作用

时间:2012-10-22 10:31:13

标签: android caching webview

我的应用程序中有一个非常简单的WebView,它显示“欢迎”对话框。

我发送服务器的语言就像这样回复:

Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());
mWebView.loadUrl("www.fake.com", noCacheHeaders);

这很好用 - 但是,当我更改设备语言时,我希望WebView语言也能改变,我可以看到"Accept-Language"的值在调试时正确变化,但内容不是不改变WebView。我已经找到了停止缓存的方法,我将在下面介绍。在语言更改后,它们都不会使网站加载不同。

为了确保服务器不是缓存问题,我确保在清除“App Data”并重新启动后WebView内容发生了变化。非常确凿的证据表明应用程序正在存储WebView数据。

所以,我已经遵循了下面列出的许多不同的建议。其中没有一个实际上是在改变我的WebView

的内容

导致崩溃的here

mWebView.clearCache(true);
mContext.deleteDatabase("webview.db");
mContext.deleteDatabase("webviewCache.db");

就这一点(在loadURL之前,之后,onProgress = 100):

mWebView.clearCache(true);

来自here

mWebView.getSettings().setAppCacheMaxSize(0);

我也试过这个:

mWebView.getSettings().setAppCacheEnabled(false);

所有导致相同的行为。当使用德语将设备语言切换为英语时,我的WebView仍保留德语网站内容。

以下是所有代码:

    Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
    noCacheHeaders.put("Pragma", "no-cache");
    noCacheHeaders.put("Cache-Control", "no-cache");
    noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());

    mWebView.getSettings().setAppCacheEnabled(false); 
    mWebView.clearCache(true);
    mWebView.getSettings().setAppCacheMaxSize(0);

    mWebView.setWebChromeClient(new WebChromeClient() {
           public void onProgressChanged(WebView view, int progress) {                 
               mProgress.setProgress(progress);
               try {
                   getActivity().setProgress(progress);
                   if(progress == 100) {
                       mProgress.setVisibility(View.GONE);
                       mWebView.clearCache(true);
                   }
               } catch(Exception e) {
                   e.printStackTrace();
               }
           }
    });
    mWebView.loadUrl("www.fake.com", noCacheHeaders);
    mWebView.clearCache(true);      

可重复的步骤:

  1. 安装应用
  2. 打开网页浏览 - 英文内容。
  3. 强制停止应用
  4. 将设备语言更改为德语
  5. 打开App&amp; WebView - 英文内容。
  6. 强制停止应用
  7. 清除应用数据
  8. 打开App&amp; WebView - 德语内容。

1 个答案:

答案 0 :(得分:10)

 CookieSyncManager.createInstance(this);         
 CookieManager cookieManager = CookieManager.getInstance();        
 cookieManager.removeAllCookie();