9

我的应用程序中有一个非常简单的 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);      

可重复的步骤:

  1. 安装软件
  2. 打开 Webview - 英文内容。
  3. 强制停止应用程序
  4. 将设备语言更改为德语
  5. 打开 App & WebView - 英文内容。
  6. 强制停止应用程序
  7. 清除应用数据
  8. 打开 App & WebView - 德语内容。
4

1 回答 1

10
 CookieSyncManager.createInstance(this);         
 CookieManager cookieManager = CookieManager.getInstance();        
 cookieManager.removeAllCookie();
于 2012-10-22T10:35:06.353 回答