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<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/



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

817   7  

7 ответов:

отредактированный фрагмент кода выше опубликованный 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, освобождает оперативную память, используемую webview и, следовательно, требует, чтобы страница снова загружается.

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

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

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

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

чтобы очистить все кэши webview, пока вы выходите из своего приложения:

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

для Lollipop и выше:

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

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

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);

Comments

    Ничего не найдено.