清除WebViewcaching的101种方法 – 所有这些都不起作用

我的应用程序中有一个非常简单的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"的值在debugging时正确地更改,但WebView中的内容不变。 我已经寻找方法来停止我下面描述的caching。 在语言改变之后,它们都没有使网站加载的效果。

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

所以,我遵循了下面列出的许多不同的build议。 其中没有一个实际上是改变我的WebView的内容:

从这里导致崩溃:

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

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

 mWebView.clearCache(true); 

从这里 :

 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. 打开Webview – 英文内容。
  3. 强制停止应用程序
  4. 将设备语言更改为德语
  5. 打开应用程序和WebView – 英文内容。
  6. 强制停止应用程序
  7. 清除应用程序数据
  8. 打开应用程序和WebView – 德国内容。

Related of "清除WebViewcaching的101种方法 – 所有这些都不起作用"

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