2013-04-16 172 views
1

我有一个WebView控件,我想每次显示当前网站时,但我认为WebView只显示网站的缓存版本。我尝试了一切发现here但似乎没有工作。我也尝试从context.getCacheDir()中删除所有文件,但没有成功。我能做什么?Android WebView - 清除缓存

这是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)); 
    } 
+0

http://stackoverflow.com/questions/2465432/android-webview-completely-clear-the-cache。 http://stackoverflow.com/questions/6542943/clearing-all-cached-items-created-by-a-webview – Raghunandan

+0

我做到了,不起作用 –

+0

显示你做了什么 – Raghunandan

回答

1

这是一个缓存问题,只有在服务器端的会话,我不得不删除cookies,现在它的工作。

+0

你是如何清除cookie的。您能否请您解释 – Adi

+0

Hi @Adi,我现在不记得了,但我可能从浏览器设置中删除了Cookie。 –

7

好像你可以清除缓存每当web视图通过显示

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

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

+1

该解决方案也提供了链接我给和不为我工作。 –

0

要清除饼干形成你的APP:

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