Android Webview – полностью очистить кэш

У меня есть 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 stack = new ArrayList(); // 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/

Если я удалю свое приложение и переустановить его, я смогу обновить веб-страницу до последней версии, то есть не кэшированную версию. Основная проблема заключается в внесении изменений в ссылки на веб-странице, поэтому внешний интерфейс веб-страницы полностью не изменился.

    7 Solutions collect form web for “Android Webview – полностью очистить кэш”

    Отредактированный fragment кода выше, опубликованный Gaunt Face, содержит ошибку в том, что если каталог не удаляется, потому что один из его файлов не может быть удален, код будет продолжать повторную попытку в бесконечном цикле. Я переписал его, чтобы быть действительно рекурсивным, и добавил параметр numDays, чтобы вы могли контролировать, сколько лет файлы должны быть обрезаны:

     //helper method for clearCache() , recursive //returns number of deleted files 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(TAG, String.format("Failed to clean the cache, error %s", e.getMessage())); } } return deletedFiles; } /* * Delete the files older than numDays days from the application cache * 0 means all files. */ public static void clearCache(final Context context, final int numDays) { Log.i(TAG, String.format("Starting cache prune, deleting files older than %d days", numDays)); int numDeletedFiles = clearCacheFolder(context.getCacheDir(), numDays); Log.i(TAG, String.format("Cache pruning completed, %d files deleted", numDeletedFiles)); } 

    Будем надеяться на использование для других людей 🙂

    Я нашел даже элегантное и простое решение для очистки кеша

     WebView obj; obj.clearCache(true); 

    http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29

    Я пытался выяснить, как очистить кеш, но все, что мы могли сделать из вышеупомянутых методов, – удалить локальные файлы, но он никогда не очищает ОЗУ.

    API clearCache, освобождает RAM, используемую веб-просмотром, и, следовательно, требует перезагрузки веб-страницы.

    Я нашел исправление, которое вы искали:

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

    По какой-то причине Android делает плохой кэш url, который он продолжает возвращаться случайно, а не новые данные, которые вам нужны. Конечно, вы могли бы просто удалить записи из базы данных, но в моем случае я просто пытаюсь получить доступ к одному URL-адресу, чтобы просто удалить всю БД.

    И не волнуйтесь, эти БД просто связаны с вашим приложением, поэтому вы не очищаете кеш всего телефона.

    Чтобы очистить все кэши веб-просмотров, когда вы подписываете форму своего APP:

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

    Для Lollipop и выше:

     CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookies(ValueCallback); 

    Это должно очистить кеш приложений, который должен быть там, где ваш кеш веб-просмотра

     File dir = getActivity().getCacheDir(); if (dir != null && dir.isDirectory()) { try { File[] children = dir.listFiles(); if (children.length > 0) { for (int i = 0; i < children.length; i++) { File[] temp = children[i].listFiles(); for (int x = 0; x < temp.length; x++) { temp[x].delete(); } } } } catch (Exception e) { Log.e("Cache", "failed cache clean"); } } 

    Чтобы очистить историю, просто выполните:

     this.appView.clearHistory(); 

    Источник: http://developer.android.com/reference/android/webkit/WebView.html

    Убедитесь, что вы используете метод ниже, чтобы данные формы не отображались как autopop при нажатии на поля ввода.

     getSettings().setSaveFormData(false); 
    Interesting Posts

    исключение исключений из деструктора

    Когда использовать атрибуты DataContract и DataMember?

    Возвращает значение из AsyncTask в Android

    Исправлена ​​ошибка инициализации ffmpeg drawtext

    Какой драйвер я должен сказать Debian, что мой Mac Mini?

    Windows CMD: «dir * .cpp» подстановочные символы «main.cpp_» и «main.cpp2»

    Изменение URL адресной строки в приложении AJAX для соответствия текущему состоянию

    @property сохранять, назначать, копировать, неатомически в Objective-C

    Конкатенация диапазона со значениями между

    Должны ли ноутбуки оставаться включенными, когда их батарея заряжается на 100%?

    Что быстрее, копируя все сразу или одно за раз?

    Как закрыть приложение OS X из командной строки с помощью псевдонима, определенного в моем .bash_profile?

    Есть ли функция R, которая применяет функцию к каждой паре столбцов?

    Как перемешать символы в строке

    Файл метаданных ‘.dll’ не найден.

    Давайте будем гением компьютера.