Tôi có một WebView trong một trong các Hoạt động của mình và khi nó tải một trang web, trang đó sẽ thu thập một số dữ liệu nền từ Facebook.
Những gì tôi đang thấy là trang được hiển thị trong ứng dụng giống nhau vào mỗi lần ứng dụng được mở và làm mới.
Tôi đã thử đặt WebView không sử dụng bộ nhớ cache và xóa bộ nhớ cache và lịch sử của WebView.
Tôi cũng đã làm theo gợi ý ở đây: Làm cách nào để xóa bộ nhớ cache cho WebView?
Nhưng không ai trong số này hoạt động, có ai có bất kỳ ý tưởng nào về việc tôi có thể khắc phục vấn đề này vì nó là một phần quan trọng trong ứng dụng của tôi.
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"));
Vì vậy, tôi đã triển khai đề xuất đầu tiên (Mặc dù đã thay đổi mã thành đệ quy)
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");
}
}
}
Tuy nhiên, điều này vẫn không thay đổi những gì trang đang hiển thị. Trên trình duyệt máy tính để bàn của mình, tôi nhận được mã html khác nhau cho trang web được tạo trong WebView, vì vậy tôi biết WebView phải được lưu vào bộ nhớ đệm ở đâu đó.
Trên kênh IRC, tôi đã được chỉ ra một bản sửa lỗi để xóa bộ nhớ đệm khỏi Kết nối URL nhưng chưa thể biết cách áp dụng nó cho WebView.
http://www.androidsnippets.org/snippets/45/
Nếu tôi xóa ứng dụng của mình và cài đặt lại, tôi có thể cập nhật lại trang web, tức là phiên bản không được lưu trong bộ nhớ cache. Vấn đề chính là những thay đổi được thực hiện đối với các liên kết trong trang web, vì vậy giao diện người dùng của trang web hoàn toàn không thay đổi.
mWebView.getSettings().setAppCacheEnabled(false);
đã không hoạt động?