Mam bardzo prosty WebView w mojej aplikacji, który wyświetla okno "Witamy".101 sposobów na wyczyszczenie pamięci podręcznej WebView - z których wszystkie nie działają
wyślę poprzek języka na serwerze, aby odpowiedzieć tak:
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());
mWebView.loadUrl("www.fake.com", noCacheHeaders);
Działa to dobrze - jednak, gdy mogę zmienić język urządzeń, chcę język WebView
się również zmienić, mogę zobacz wartość "Accept-Language"
zmienia się poprawnie podczas debugowania, ale zawartość nie zmienia się w WebView. Szukałem sposobów na zatrzymanie buforowania, które opisuję poniżej. Żadna z nich nie powoduje, że witryna ładuje się inaczej po zmianie języka.
Aby upewnić się, że serwer nie jest problemem z buforowaniem, zapewniam, że zawartość WebView zmieni się po wyczyszczeniu "Dane aplikacji" i ponownym uruchomieniu. Dowód na to, że aplikacja przechowuje dane WebView.
Podążałem więc wieloma różnymi sugestiami, które wymienię poniżej. Nie jeden z nich rzeczywiście się zmienia treść mojego WebView
:
Od here co powoduje awarię:
mWebView.clearCache(true);
mContext.deleteDatabase("webview.db");
mContext.deleteDatabase("webviewCache.db");
Wystarczy to na swój własny (zarówno przed loadURL po nim, a onProgress = 100) :
mWebView.clearCache(true);
Od here:
mWebView.getSettings().setAppCacheMaxSize(0);
Próbowałem również:
mWebView.getSettings().setAppCacheEnabled(false);
Wszystkie wyniki w tym samym zachowaniu. Mój WebView, zmieniając język urządzenia na angielski z niemieckiego, nadal zachowywał zawartość strony niemieckiej.
Oto cały kod razem:
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.clearCache(true);
mWebView.getSettings().setAppCacheMaxSize(0);
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
mProgress.setProgress(progress);
try {
getActivity().setProgress(progress);
if(progress == 100) {
mProgress.setVisibility(View.GONE);
mWebView.clearCache(true);
}
} catch(Exception e) {
e.printStackTrace();
}
}
});
mWebView.loadUrl("www.fake.com", noCacheHeaders);
mWebView.clearCache(true);
Powtarzalne czynności:
- Zainstaluj aplikację
- Otwarte Webview - English zawartość.
- stop force App
- Zmień język na niemiecki Device
- Otwórz App & WebView - English treści.
- stop force App
- Wyczyść App Dane
- Otwórz App & WebView - Niemiecki treści.
Uwielbiam tytuł! Nie mógłbyś być bardziej poprawny. – DroidT