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é?Réponses:
L'extrait de code modifié ci-dessus publié par Gaunt Face contient une erreur en ce sens que si un répertoire ne parvient pas à être supprimé car l'un de ses fichiers ne peut pas être supprimé, le code continuera à réessayer dans une boucle infinie. Je l'ai réécrit pour qu'il soit vraiment récursif et j'ai ajouté un paramètre numDays afin que vous puissiez contrôler l'âge des fichiers élagués:
J'espère que cela sera utile à d'autres personnes :)
la source
J'ai trouvé une solution même élégante et simple pour vider le cache
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
J'ai essayé de trouver le moyen de vider le cache, mais tout ce que nous pouvions faire à partir des méthodes mentionnées ci-dessus était de supprimer les fichiers locaux, mais cela ne nettoie jamais la RAM.
L'API clearCache libère la RAM utilisée par la vue Web et oblige donc à recharger la page Web.
la source
J'ai trouvé le correctif que vous recherchiez:
Pour une raison quelconque, Android crée un mauvais cache de l'URL qu'il renvoie par accident au lieu des nouvelles données dont vous avez besoin. Bien sûr, vous pouvez simplement supprimer les entrées de la base de données, mais dans mon cas, j'essaie d'accéder à une seule URL, il est donc plus facile de supprimer toute la base de données.
Et ne vous inquiétez pas, ces bases de données sont simplement associées à votre application, vous ne videz donc pas le cache de tout le téléphone.
la source
Pour effacer tous les caches de vues Web lorsque vous vous déconnectez de votre APP:
Pour Lollipop et plus:
la source
Cela devrait effacer le cache de vos applications, qui devrait être l'emplacement de votre cache de vues Web
la source
La seule solution qui fonctionne pour moi
la source
Utiliser simplement le code ci-dessous dans Kotlin fonctionne pour moi
la source
Pour effacer le cookie et le cache de Webview,
la source
Pour effacer l'historique, faites simplement:
Source: http://developer.android.com/reference/android/webkit/WebView.html
la source
Assurez-vous que vous utilisez la méthode ci-dessous pour que les données du formulaire ne soient pas affichées comme autopop lorsque vous cliquez sur les champs de saisie.
la source
la source
Il peut effacer le compte Google dans ma vue Web
la source
cas d'utilisation: la liste des éléments est affichée dans la vue du recycleur, chaque fois qu'un élément clique, elle masque la vue du recycleur et affiche la vue Web avec l'URL de l'élément.
problème: j'ai un problème similaire dans lequel une fois que j'ouvre une vue
url_one
Web, puis j'essaie d'en ouvrir une autreurl_two
dans la vue Web, elle s'afficheurl_one
en arrière-plan jusqu'à ce qu'elleurl_two
soit chargée.solution: donc pour résoudre ce que j'ai fait, c'est charger une chaîne vide
""
commeurl
juste avant de la cacherurl_one
et de la chargerurl_two
.production: chaque fois que je charge une nouvelle URL dans la vue Web, aucune autre page Web ne s'affiche en arrière-plan.
code
la source