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ó?