J'ai une WebView dans l'une de mes activités, et lorsqu'elle charge une page Web, la page recueille des données d'arrière-plan de Facebook.
Ce que je vois cependant, c'est que la page affichée dans l'application est la même à chaque fois que l'application est ouverte et actualisée.
J'ai essayé de configurer WebView pour ne pas utiliser le cache et effacer le cache et l'historique de WebView.
J'ai également suivi la suggestion ici: Comment vider le cache pour WebView?
Mais rien de tout cela ne fonctionne, est-ce que quelqu'un a des idées sur le fait que je peux surmonter ce problème parce que c'est une partie vitale de mon application.
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"));
J'ai donc implémenté la première suggestion (bien que changé le code pour être récursif)
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");
}
}
}
Cependant, cela n'a toujours pas changé ce que la page affiche. Sur mon navigateur de bureau, j'obtiens un code html différent de la page Web produite dans WebView, donc je sais que WebView doit être mis en cache quelque part.
Sur le canal IRC, on m'a indiqué un correctif pour supprimer la mise en cache d'une connexion URL, mais je ne vois pas encore comment l'appliquer à une WebView.
http://www.androidsnippets.org/snippets/45/
Si je supprime mon application et la réinstalle, je peux remettre la page Web à jour, c'est-à-dire une version non mise en cache. Le principal problème est que les modifications sont apportées aux liens dans la page Web, de sorte que le front-end de la page Web est complètement inchangé.
mWebView.getSettings().setAppCacheEnabled(false);
n'a pas fonctionné?