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

Gra*_*eme 9 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

这里开始导致崩溃:

mWebView.clearCache(true);
mContext.deleteDatabase("webview.db");
mContext.deleteDatabase("webviewCache.db");
Run Code Online (Sandbox Code Playgroud)

这就是它自己(在loadURL之前,在它之后,onProgress = 100):

mWebView.clearCache(true);
Run Code Online (Sandbox Code Playgroud)

这里开始:

mWebView.getSettings().setAppCacheMaxSize(0);
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

mWebView.getSettings().setAppCacheEnabled(false);
Run Code Online (Sandbox Code Playgroud)

所有都导致相同的行为.将设备语言从德语切换为英语时,我的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);      
Run Code Online (Sandbox Code Playgroud)

可重复的步骤:

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

muk*_*esh 10

 CookieSyncManager.createInstance(this);         
 CookieManager cookieManager = CookieManager.getInstance();        
 cookieManager.removeAllCookie();
Run Code Online (Sandbox Code Playgroud)

  • 请详细说明为什么要创建`CookieSyncManager`实例然后使用`CookieManager`来实际删除cookie. (8认同)