У меня есть 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/
Если я удалю свое приложение и переустановлю его, я смогу получить обновленную веб-страницу, то есть версию без кеширования. Основная проблема заключается в том, что изменения вносятся в ссылки на веб-странице, поэтому внешний вид веб-страницы полностью не изменяется.
mWebView.getSettings().setAppCacheEnabled(false);
не сработало?Ответы:
Отредактированный фрагмент кода выше, опубликованный Gaunt Face, содержит ошибку, заключающуюся в том, что если каталог не удаляется из-за того, что один из его файлов не может быть удален, код будет продолжать повторять попытки в бесконечном цикле. Я переписал его, чтобы он был действительно рекурсивным, и добавил параметр numDays, чтобы вы могли контролировать, сколько лет должны быть удаляемые файлы:
Надеюсь, будет полезно другим людям :)
источник
Я нашел даже элегантное и простое решение для очистки кеша
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
Я пытался выяснить, как очистить кеш, но все, что мы могли сделать с помощью вышеупомянутых методов, - это удалить локальные файлы, но никогда не очищать оперативную память.
API clearCache освобождает оперативную память, используемую веб-просмотром, и, следовательно, требует, чтобы веб-страница была загружена снова.
источник
Я нашел исправление, которое вы искали:
По какой-то причине Android создает плохой кеш URL-адреса, который он продолжает случайно возвращать вместо новых данных, которые вам нужны. Конечно, вы можете просто удалить записи из БД, но в моем случае я пытаюсь получить доступ только к одному URL-адресу, поэтому сдуть всю БД проще.
И не волнуйтесь, эти БД просто связаны с вашим приложением, поэтому вы не очищаете кеш всего телефона.
источник
Чтобы очистить все кеши веб-просмотра при выходе из приложения из приложения:
Для Lollipop и выше:
источник
Это должно очистить кеш ваших приложений, который должен быть там, где находится ваш кеш веб-просмотра.
источник
Единственное решение, которое работает для меня
источник
Просто использование кода ниже в Котлине работает для меня
источник
Чтобы очистить файлы cookie и кеш из Webview,
источник
Чтобы очистить историю, просто выполните:
Источник: http://developer.android.com/reference/android/webkit/WebView.html
источник
Убедитесь, что вы используете метод ниже, чтобы данные формы не отображались как автозапуск при нажатии на поля ввода.
источник
источник
Он может очистить учетную запись Google в моем веб-просмотре
источник
Пример использования: список элементов отображается в представлении ресайклера, всякий раз, когда какой-либо элемент щелкает, он скрывает вид ресайклера и показывает веб-представление с URL-адресом элемента.
Проблема: у меня аналогичная проблема, когда я открываю
url_one
в веб-просмотре, а затем пытаюсь открыть другойurl_two
в веб-просмотре, он отображаетсяurl_one
в фоновом режиме доurl_two
загрузки.Решение: чтобы решить то, что я сделал, это загрузить пустую строку,
""
какurl
перед скрытиемurl_one
и загрузкойurl_two
.вывод: всякий раз, когда я загружаю новый URL-адрес в веб-просмотре, он не показывает никаких других веб-страниц в фоновом режиме.
код
источник