【问题标题】:Android WebView - clear cacheAndroid WebView - 清除缓存
【发布时间】:2013-04-16 15:36:24
【问题描述】:

我有一个 WebView 控件,我想每次显示当前站点,但我认为 WebView 仅显示站点的缓存版本。我尝试了找到here 的所有方法,但似乎没有任何效果。我还尝试从 context.getCacheDir() 中删除所有文件,但没有成功。我能做什么?

这是我的 onCreate 方法代码:

    clearCache(this, 0);

    setContentView(R.layout.webview);

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

    mWebView = (WebView)findViewById(R.id.webview);
    mWebView.setWebViewClient(new CenterWebViewClient(this));
    mWebView.setWebChromeClient(new CenterWebChromeClient(this));
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setAppCacheEnabled(false);
    mWebView.getSettings().setAppCacheMaxSize(1);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

    String  url = "https://www.exacmple.com";

    if (url != null) {
        Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
        noCacheHeaders.put("Pragma", "no-cache");
        noCacheHeaders.put("Cache-Control", "no-cache");
        mWebView.loadUrl(url, noCacheHeaders);
    }

clearCache 功能:

static int clearCacheFolder(final File dir, final int numDays) {

    int deletedFiles = 0;
    if (dir!= null && dir.isDirectory()) {
        try {
            for (File child:dir.listFiles()) {

                //first delete subdirectories recursively
                if (child.isDirectory()) {
                    deletedFiles += clearCacheFolder(child, numDays);
                }

                //then delete the files and subdirectories in this dir
                //only empty directories can be deleted, so subdirs have been done first
                if (child.lastModified() < new Date().getTime() - numDays * DateUtils.DAY_IN_MILLIS) {
                    if (child.delete()) {
                        deletedFiles++;
                    }
                }
            }
        }
        catch(Exception e) {
            Log.e("WebView", String.format("Failed to clean the cache, error %s", e.getMessage()));
        }
    }
    return deletedFiles;
}

    public static void clearCache(final Context context, final int numDays) {
         Log.i("WebView", String.format("Starting cache prune, deleting files older than %d days", numDays));
         int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays);
         Log.i("WebView", String.format("Cache pruning completed, %d files deleted", numDeletedFiles));
    }

【问题讨论】:

标签: android webview browser-cache


【解决方案1】:

似乎只要显示 webview 就可以清除缓存

 @Override
public void onPageFinished(WebView view, String url) {
     super.onPageFinished(view, url);
     view.clearCache(true);
}

通过 - https://stackoverflow.com/a/10701961/2250339

【讨论】:

  • 我提供的链接上也提供了该解决方案,但对我不起作用。
【解决方案2】:

这不是缓存的问题,只是服务器端的会话,我不得不删除 cookie,现在它可以工作了。

【讨论】:

  • 你是如何清除 cookie 的。你能解释一下吗
  • 嗨@Adi,我现在不记得了,但我可能从浏览器设置中删除了cookie。
【解决方案3】:

清除 APP 中的 cookie:

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

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多