我的应用程序中有一个非常简单的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);
可重复的步骤:
答案 0 :(得分:10)
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();