アプリに「ようこそ」ダイアログを表示する非常に単純な WebView があります。
サーバーが次のように応答するように、言語を介して送信します。
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);
これは正常に動作します - ただし、デバイスの言語WebView
を変更すると、言語も変更したいのですが、デバッグ時に値"Accept-Language"
が正しく変更されていることがわかりますが、コンテンツは WebView で変更されていません。以下で説明するキャッシュを停止する方法を探しました。それらのどれも、言語の変更後にサイトの読み込みを変える効果はありません.
サーバーがキャッシュの問題ではないことを確認するために、「アプリデータ」をクリアして再起動した後、WebView コンテンツが変更されることを確認します。アプリが WebView データを保存しているという決定的な証拠。
そのため、以下にリストしたさまざまな提案に従いました。実際に my の内容を変更しているものはありませんWebView
:
クラッシュを引き起こすここから:
mWebView.clearCache(true);
mContext.deleteDatabase("webview.db");
mContext.deleteDatabase("webviewCache.db");
これだけです (loadURL の前、後、および onProgress=100 の両方):
mWebView.clearCache(true);
ここから:
mWebView.getSettings().setAppCacheMaxSize(0);
私もこれを試しました:
mWebView.getSettings().setAppCacheEnabled(false);
すべて同じ動作になります。私の WebView は、デバイスの言語をドイツ語から英語に切り替えても、ドイツ語の Web サイトのコンテンツを保持していました。
すべてのコードをまとめたものを次に示します。
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);
繰り返し可能な手順:
- アプリをインストールする
- Webview - 英語コンテンツを開きます。
- アプリの強制停止
- デバイスの言語をドイツ語に変更
- App & WebView - 英語コンテンツを開きます。
- アプリの強制停止
- アプリデータを消去
- App & WebView - ドイツ語コンテンツを開きます。