2012-10-22 14 views
9

मेरे पास मेरे ऐप में एक बहुत ही सरल वेबव्यू है जो "वेलकम" संवाद प्रदर्शित करता है।वेबव्यू कैश को साफ़ करने के 101 तरीके - जिनमें से सभी काम नहीं करते

मैं सर्वर के लिए भाषा का भर में भेजें ताकि तरह से प्रतिक्रिया करने के लिए:

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:

here से जो एक दुर्घटना का कारण बनता है: बस इस पर

mWebView.clearCache(true); 
mContext.deleteDatabase("webview.db"); 
mContext.deleteDatabase("webviewCache.db"); 

अपने आप (दोनों loadURL से पहले, यह करने के बाद, और onProgress = 100) :

mWebView.clearCache(true); 

here से:

mWebView.getSettings().setAppCacheMaxSize(0); 

मैंने यह भी कोशिश की है:

mWebView.getSettings().setAppCacheEnabled(false); 

सभी परिणाम एक ही व्यवहार में हैं। मेरा वेब व्यू, जर्मन भाषा से अंग्रेजी भाषा को स्विच करते समय, अभी भी जर्मन वेबसाइट सामग्री को बरकरार रखा है।

यहाँ कोड के सभी एक साथ है:

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);  

Repeatable कदम:

  1. एप्लिकेशन
  2. ओपन वेब-दृश्य स्थापित करें - अंग्रेज़ी सामग्री। अंग्रेजी सामग्री -
  3. फोर्स बंद करो अनुप्रयोग
  4. डिवाइस बदलें जर्मन
  5. ओपन अनुप्रयोग & WebView लिए भाषा।
  6. फोर्स बंद करो अनुप्रयोग
  7. एप्लिकेशन डेटा साफ़
  8. ओपन अनुप्रयोग & WebView - जर्मन सामग्री।
+0

प्यार शीर्षक! आप और अधिक सही नहीं हो सका। – DroidT

उत्तर

10
CookieSyncManager.createInstance(this);   
CookieManager cookieManager = CookieManager.getInstance();   
cookieManager.removeAllCookie(); 
+0

बढ़िया ... क्यों सर्वर सत्र से भाषा को जोड़ रहा है मेरे बाहर है। – Graeme

+7

कृपया विस्तृत करें कि आप 'कुकी सिंक प्रबंधक' का एक उदाहरण क्यों बना रहे हैं और फिर कुकीज़ को वास्तव में हटाने के लिए 'कुकी प्रबंधक' का उपयोग करें। – ohcibi

+0

महान !!! अंत में एक जवाब, जो काम कर रहा है !!! THX – kyp