Ich habe eine WebView in einer meiner Aktivitäten und wenn eine Webseite geladen wird, sammelt die Seite einige Hintergrunddaten von Facebook.
Was ich jedoch sehe, ist, dass die in der Anwendung angezeigte Seite bei jedem Öffnen und Aktualisieren der App gleich ist.
Ich habe versucht, WebView so einzustellen, dass kein Cache verwendet wird, und den Cache und den Verlauf von WebView zu löschen.
Ich bin auch dem Vorschlag hier gefolgt: Wie leere ich den Cache für WebView?
Aber nichts davon funktioniert, hat jemand eine Idee, wie ich dieses Problem überwinden kann, weil es ein wesentlicher Bestandteil meiner Anwendung ist.
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"));
Also habe ich den ersten Vorschlag implementiert (obwohl der Code so geändert wurde, dass er rekursiv ist)
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");
}
}
}
Dies hat jedoch immer noch nichts an der Anzeige der Seite geändert. In meinem Desktop-Browser erhalte ich einen anderen HTML-Code als die in WebView erstellte Webseite, sodass ich weiß, dass WebView irgendwo zwischengespeichert werden muss.
Auf dem IRC-Kanal wurde ich auf ein Update zum Entfernen des Cachings aus einer URL-Verbindung hingewiesen, kann aber noch nicht sehen, wie es auf eine WebView angewendet werden soll.
http://www.androidsnippets.org/snippets/45/
Wenn ich meine Anwendung lösche und erneut installiere, kann ich die Webseite wieder auf den neuesten Stand bringen, dh eine nicht zwischengespeicherte Version. Das Hauptproblem besteht darin, dass Änderungen an Links auf der Webseite vorgenommen werden, sodass das Frontend der Webseite völlig unverändert bleibt.
mWebView.getSettings().setAppCacheEnabled(false);
hat nicht funktioniert?Antworten:
Das oben von Gaunt Face veröffentlichte bearbeitete Code-Snippet enthält den Fehler, dass der Code in einer Endlosschleife wiederholt wird, wenn ein Verzeichnis nicht gelöscht werden kann, weil eine seiner Dateien nicht gelöscht werden kann. Ich habe es so umgeschrieben, dass es wirklich rekursiv ist, und einen numDays-Parameter hinzugefügt, damit Sie steuern können, wie alt die zu bereinigenden Dateien sein müssen:
Hoffentlich von Nutzen für andere Leute :)
quelle
Ich habe eine noch elegantere und einfachere Lösung gefunden, um den Cache zu leeren
http://developer.android.com/reference/android/webkit/WebView.html#clearCache%28boolean%29
Ich habe versucht, herauszufinden, wie der Cache geleert werden kann, aber mit den oben genannten Methoden konnten wir nur die lokalen Dateien entfernen, aber der RAM wurde nie bereinigt.
Die API clearCache gibt den von der Webansicht verwendeten RAM frei und fordert daher das erneute Laden der Webseite.
quelle
Ich habe das Update gefunden, nach dem Sie gesucht haben:
Aus irgendeinem Grund erstellt Android einen fehlerhaften Cache der URL, die versehentlich zurückgegeben wird, anstatt der neuen Daten, die Sie benötigen. Sicher, Sie könnten einfach die Einträge aus der Datenbank löschen, aber in meinem Fall versuche ich nur, auf eine URL zuzugreifen, damit das Wegblasen der gesamten Datenbank einfacher ist.
Und keine Sorge, diese DBs sind nur mit Ihrer App verknüpft, sodass Sie nicht den Cache des gesamten Telefons leeren.
quelle
So löschen Sie alle Webview-Caches, während Sie sich von Ihrer APP abmelden:
Für Lollipop und höher:
quelle
Dies sollte Ihren Anwendungscache leeren, in dem sich Ihr Webview-Cache befinden sollte
quelle
Die einzige Lösung, die für mich funktioniert
quelle
Die einfache Verwendung des folgenden Codes in Kotlin funktioniert für mich
quelle
Um Cookies und Cache aus Webview zu löschen,
quelle
Um die Geschichte zu löschen, gehen Sie einfach wie folgt vor:
Quelle: http://developer.android.com/reference/android/webkit/WebView.html
quelle
Stellen Sie sicher, dass Sie die folgende Methode verwenden, damit die Formulardaten nicht als Autopop angezeigt werden, wenn Sie auf Eingabefelder klicken.
quelle
quelle
Es kann Google-Konto in meiner Webansicht löschen
quelle
Anwendungsfall: Die Liste der Artikel wird in der Recycler-Ansicht angezeigt. Immer wenn ein Artikel darauf klickt, wird die Recycler-Ansicht ausgeblendet und die Webansicht mit der Artikel-URL angezeigt.
Problem: Ich habe ein ähnliches Problem:
url_one
Wenn ich eine in der Webansicht öffne und dann versuche, eine andereurl_two
in der Webansicht zu öffnen , wird sieurl_one
im Hintergrund angezeigt, bis sieurl_two
geladen ist.Lösung: Um zu lösen, was ich getan habe, muss eine leere Zeichenfolge
""
wieurl
kurz vor dem Ausblendenurl_one
und Laden geladen werdenurl_two
.Ausgabe: Wenn ich eine neue URL in die Webansicht lade, wird keine andere Webseite im Hintergrund angezeigt.
Code
quelle