我的应用程序中有一个非常简单的 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 中的内容没有更改。我一直在寻找停止缓存的方法,如下所述。它们都没有在语言更改后使网站加载不同的效果。
为了确保服务器不是缓存问题,我确保在清除“应用程序数据”并重新启动后 WebView 内容发生变化。相当确凿的证据表明应用程序正在存储 WebView 数据。
所以,我遵循了我在下面列出的许多不同的建议。其中没有一个实际上改变了 my 的内容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);
可重复的步骤:
- 安装软件
- 打开 Webview - 英文内容。
- 强制停止应用程序
- 将设备语言更改为德语
- 打开 App & WebView - 英文内容。
- 强制停止应用程序
- 清除应用数据
- 打开 App & WebView - 德语内容。