【发布时间】:2011-01-28 18:08:31
【问题描述】:
我的一个活动中有一个 WebView,当它加载网页时,该页面会从 Facebook 收集一些背景数据。
我看到的是,每次打开和刷新应用程序时,应用程序中显示的页面都是相同的。
我已尝试将 WebView 设置为不使用缓存并清除 WebView 的缓存和历史记录。
我也遵循了这里的建议:How to empty cache for 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");
}
}
}
但这仍然没有改变页面显示的内容。在我的桌面浏览器上,我得到了与 WebView 中生成的网页不同的 html 代码,所以我知道 WebView 必须在某处缓存。
在 IRC 频道上,有人向我指出了从 URL 连接中删除缓存的修复程序,但还看不到如何将其应用于 WebView。
http://www.androidsnippets.org/snippets/45/
如果我删除我的应用程序并重新安装它,我可以使网页恢复到最新状态,即非缓存版本。主要问题是网页中的链接发生了变化,所以网页的前端完全没有变化。
【问题讨论】:
-
mWebView.getSettings().setAppCacheEnabled(false);没用?