安卓Webview - 完全清除缓存

141

我在一个Activity中有一个WebView,当它加载网页时,该页面从Facebook收集一些背景数据。

但我看到的是,每次打开并刷新应用程序时,显示在应用程序中的页面都是相同的。

我尝试设置WebView不使用缓存并清除WebView的缓存和历史记录。

我还遵循了这里的建议:如何清空WebView的缓存?

但是这些都无法解决问题,有人有任何想法吗?因为这是我的应用程序的重要部分。

    mWebView.setWebChromeClient(new WebChromeClient()
    {
           public void onProgressChanged(WebView view, int progress)
           {
               if(progress >= 100)
               {
                   mProgressBar.setVisibility(ProgressBar.INVISIBLE);
               }
               else
               {
                   mProgressBar.setVisibility(ProgressBar.VISIBLE);
               }
           }
    });
    mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler));
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.clearHistory();
    mWebView.clearFormData();
    mWebView.clearCache(true);

    WebSettings webSettings = mWebView.getSettings();
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

    Time time = new Time();
    time.setToNow();

    mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S"));

所以我实现了第一个建议(但将代码更改为递归)

private void clearApplicationCache() {
    File dir = getCacheDir();

    if (dir != null && dir.isDirectory()) {
        try {
            ArrayList<File> stack = new ArrayList<File>();

            // Initialise the list
            File[] children = dir.listFiles();
            for (File child : children) {
                stack.add(child);
            }

            while (stack.size() > 0) {
                Log.v(TAG, LOG_START + "Clearing the stack - " + stack.size());
                File f = stack.get(stack.size() - 1);
                if (f.isDirectory() == true) {
                    boolean empty = f.delete();

                    if (empty == false) {
                        File[] files = f.listFiles();
                        if (files.length != 0) {
                            for (File tmp : files) {
                                stack.add(tmp);
                            }
                        }
                    } else {
                        stack.remove(stack.size() - 1);
                    }
                } else {
                    f.delete();
                    stack.remove(stack.size() - 1);
                }
            }
        } catch (Exception e) {
            Log.e(TAG, LOG_START + "Failed to clean the cache");
        }
    }
}
然而,这仍然没有改变页面显示的内容。在我的桌面浏览器中,我得到的HTML代码与WebView生成的网页不同,因此我知道WebView一定在某个地方进行缓存。
在IRC频道上,有人指出可以通过删除URL连接的缓存来解决问题,但我还不知道如何将其应用于WebView。 http://www.androidsnippets.org/snippets/45/ 如果我删除我的应用程序并重新安装它,我就可以获得最新的网页版本,即非缓存版本。主要问题是链接在网页上进行更改,所以网页的前端完全没有改变。

1
mWebView.getSettings().setAppCacheEnabled(false); 没有起作用吗? - Paul
16个回答

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

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

它可以在我的Webview中清除Google帐户


2
CookieSyncManager已被弃用。 - NoWar

0

如果您想在Kotlin中完全清除缓存,可以使用以下方法:

context.cacheDir.deleteRecursively()

如果有人需要 Kotlin 代码的话,这里提供一份(:


0

0

请确保使用以下方法,以使表单数据在单击输入字段时不会显示为自动填充。

getSettings().setSaveFormData(false);

0
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db")

解决了问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接