Eu tenho um WebView em uma de minhas atividades e, quando carrega uma página da web, a página reúne alguns dados de fundo do Facebook.
O que estou vendo, porém, é que a página exibida no aplicativo é a mesma sempre que o aplicativo é aberto e atualizado.
Tentei configurar o WebView para não usar cache e limpar o cache e o histórico do WebView.
Eu também segui a sugestão aqui: Como esvaziar o cache do WebView?
Mas nada disso funciona, alguém tem alguma ideia de como posso superar esse problema porque é uma parte vital da minha aplicação.
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"));
Então, implementei a primeira sugestão (embora tenha alterado o código para ser recursivo)
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");
}
}
}
No entanto, isso ainda não mudou o que a página está exibindo. No navegador do meu desktop, estou obtendo um código html diferente para a página da web produzida no WebView, então sei que o WebView deve estar em cache em algum lugar.
No canal IRC, fui apontado para uma correção para remover o cache de uma conexão de URL, mas ainda não consigo ver como aplicá-lo a um WebView.
http://www.androidsnippets.org/snippets/45/
Se eu excluir meu aplicativo e reinstalá-lo, posso fazer com que a página da web seja atualizada, ou seja, uma versão não armazenada em cache. O principal problema é que as alterações são feitas nos links da página da web, de modo que o front-end da página fica completamente inalterado.
mWebView.getSettings().setAppCacheEnabled(false);
não funcionou?Respostas:
O trecho de código editado acima postado por Gaunt Face contém um erro em que se um diretório falhar ao excluir porque um de seus arquivos não pode ser excluído, o código continuará tentando em um loop infinito. Eu o reescrevi para ser verdadeiramente recursivo e adicionei um parâmetro numDays para que você possa controlar a idade dos arquivos que foram removidos:
Espero que possa ser usado por outras pessoas :)
fonte
Eu encontrei uma solução simples e elegante para limpar o cache
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
Tenho tentado descobrir uma maneira de limpar o cache, mas tudo o que pudemos fazer com os métodos mencionados acima foi remover os arquivos locais, mas nunca limpar a RAM.
A API clearCache libera a RAM usada pelo webview e, portanto, exige que a página da web seja carregada novamente.
fonte
Encontrei a solução que você procurava:
Por alguma razão, o Android cria um cache ruim da url, que retorna acidentalmente, em vez dos novos dados de que você precisa. Claro, você poderia simplesmente excluir as entradas do banco de dados, mas no meu caso, estou apenas tentando acessar uma URL, de modo que explodir todo o banco de dados é mais fácil.
E não se preocupe, esses bancos de dados estão apenas associados ao seu aplicativo, então você não está limpando o cache de todo o telefone.
fonte
Para limpar todos os caches do webview enquanto você sai do seu APP:
Para Lollipop e superior:
fonte
Isso deve limpar o cache de seus aplicativos, que deve estar onde está o cache de sua visualização
fonte
A única solução que funciona para mim
fonte
Simplesmente usar o código abaixo em Kotlin funciona para mim
fonte
Para limpar o cookie e o cache do Webview,
fonte
Para limpar o histórico, basta fazer:
Fonte: http://developer.android.com/reference/android/webkit/WebView.html
fonte
Certifique-se de usar o método abaixo para que os dados do formulário não sejam exibidos como autopop quando clicado nos campos de entrada.
fonte
fonte
Ele pode limpar a conta do Google em meu webview
fonte
caso de uso: a lista de itens está sendo exibida na visualização do reciclador, sempre que algum item clica, ele oculta a visualização do reciclador e mostra a visualização da web com o URL do item.
Problema: tenho um problema semelhante no qual, uma vez que abro um
url_one
no webview e tento abrir outrourl_two
no webview, ele apareceurl_one
em background atéurl_two
ser carregado.solução: para resolver o que fiz foi carregar a string em branco
""
comourl
antes de esconderurl_one
e carregarurl_two
.saída: sempre que carrego qualquer novo url no webview, ele não mostra nenhuma outra página da web em segundo plano.
código
fonte