9

アプリに「ようこそ」ダイアログを表示する非常に単純な 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);      

繰り返し可能な手順:

  1. アプリをインストールする
  2. Webview - 英語コンテンツを開きます。
  3. アプリの強制停止
  4. デバイスの言語をドイツ語に変更
  5. App & WebView - 英語コンテンツを開きます。
  6. アプリの強制停止
  7. アプリデータを消去
  8. App & WebView - ドイツ語コンテンツを開きます。
4

1 に答える 1

10
 CookieSyncManager.createInstance(this);         
 CookieManager cookieManager = CookieManager.getInstance();        
 cookieManager.removeAllCookie();
于 2012-10-22T10:35:06.353 に答える