Tengo un WebView en una de mis actividades, y cuando carga una página web, la página recopila algunos datos de fondo de Facebook.
Sin embargo, lo que veo es que la página que se muestra en la aplicación es la misma cada vez que se abre y se actualiza la aplicación.
Intenté configurar WebView para que no use la caché y borre la caché y el historial de WebView.
También he seguido la sugerencia aquí: ¿Cómo vaciar el caché para WebView?
Pero nada de esto funciona, ¿alguien tiene alguna idea de que puedo superar este problema porque es una parte vital de mi aplicación?
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"));
Así que implementé la primera sugerencia (aunque cambié el código para que sea 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");
}
}
}
Sin embargo, esto todavía no ha cambiado lo que se muestra en la página. En mi navegador de escritorio, obtengo un código html diferente al de la página web producida en WebView, así que sé que WebView debe estar almacenado en caché en algún lugar.
En el canal de IRC, me señalaron una solución para eliminar el almacenamiento en caché de una conexión URL, pero todavía no veo cómo aplicarlo a un WebView.
http://www.androidsnippets.org/snippets/45/
Si elimino mi aplicación y la reinstalo, puedo volver a actualizar la página web, es decir, una versión sin caché. El principal problema es que los cambios se realizan en los enlaces de la página web, por lo que la parte frontal de la página web no se modifica por completo.
mWebView.getSettings().setAppCacheEnabled(false);
no funcionó?Respuestas:
El fragmento de código editado anteriormente publicado por Gaunt Face contiene un error en el sentido de que si un directorio no se elimina porque uno de sus archivos no se puede eliminar, el código seguirá reintentando en un bucle infinito. Lo reescribí para que fuera realmente recursivo y agregué un parámetro numDays para que pueda controlar la antigüedad de los archivos que se eliminan:
Con suerte, de utilidad para otras personas :)
fuente
Encontré una solución incluso elegante y simple para borrar el caché
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
He estado tratando de encontrar la forma de borrar el caché, pero todo lo que pudimos hacer con los métodos mencionados anteriormente fue eliminar los archivos locales, pero nunca limpiaron la RAM.
La API clearCache libera la RAM utilizada por la vista web y, por lo tanto, exige que la página web se cargue nuevamente.
fuente
Encontré la solución que estabas buscando:
Por alguna razón, Android crea un caché incorrecto de la URL que sigue regresando por accidente en lugar de los nuevos datos que necesita. Claro, podría simplemente eliminar las entradas de la base de datos, pero en mi caso solo estoy tratando de acceder a una URL, por lo que eliminar toda la base de datos es más fácil.
Y no se preocupe, estas bases de datos solo están asociadas con su aplicación, por lo que no está borrando el caché de todo el teléfono.
fuente
Para borrar todos los cachés de webview mientras cierra sesión desde su aplicación:
Para Lollipop y superior:
fuente
Esto debería borrar el caché de sus aplicaciones, que debería estar donde está el caché de su vista web
fuente
La única solución que me funciona
fuente
Simplemente usar el siguiente código en Kotlin funciona para mí
fuente
Para borrar las cookies y la caché de Webview,
fuente
Para borrar el historial, simplemente haga:
Fuente: http://developer.android.com/reference/android/webkit/WebView.html
fuente
Asegúrese de utilizar el método siguiente para que los datos del formulario no se muestren como autopop al hacer clic en los campos de entrada.
fuente
fuente
Puede borrar la cuenta de Google en mi vista web
fuente
caso de uso: la lista de elementos se muestra en la vista del reciclador, cada vez que se hace clic en un elemento, se oculta la vista del reciclador y se muestra la vista web con la URL del elemento.
Problema: tengo un problema similar en el que una vez que abro una vista
url_one
web, luego intento abrir otra vistaurl_two
web, se muestraurl_one
en segundo plano hasta queurl_two
se carga.solución: así que para resolver lo que hice es cargar una cadena en blanco
""
comourl
justo antes de ocultarurl_one
y cargarurl_two
.salida: cada vez que cargo una nueva URL en webview, no muestra ninguna otra página web en segundo plano.
código
fuente