2010-01-13 11 views
11

मैं वर्तमान में एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जो http अनुरोधों का उपयोग कर छवियां प्राप्त करता है। यदि मैं प्रदर्शन और बैंडविड्थ उपयोग में सुधार करने के लिए उन छवियों को कैश कर सकता हूं तो यह काफी सूजन होगी।एंड्रॉइड के कैश मैनेजर का उपयोग कैसे करें?

मैं एंड्रॉयड संदर्भ में CacheManager वर्ग भर में आया है, लेकिन मैं वास्तव में यह कैसे उपयोग करने के लिए पता नहीं है, या क्या यह वास्तव में होता है।

मैं पहले से ही इस उदाहरण के माध्यम से scoped, लेकिन मैं कुछ मदद की यह समझने की जरूरत है:

/core/java/android/webkit/gears/ApacheHttpRequestAndroid.java

इसके अलावा, संदर्भ कहता है:

"नेटवर्क अनुरोध इस घटक के लिए और अगर प्रदान की जाती हैं उन्हें कैश द्वारा हल नहीं किया जा सकता है, HTTP शीर्षलेख सामग्री के पुनर्मूल्यांकन के अनुरोध के लिए उपयुक्त के रूप में संलग्न हैं। "

मुझे यकीन नहीं है कि इसका मतलब क्या है या यह मेरे लिए कैसे काम करेगा, क्योंकि कैशमेनगर की getCacheFile केवल एक स्ट्रिंग यूआरएल और हेडर युक्त एक मानचित्र स्वीकार करता है। निश्चित नहीं है कि संलग्नक का मतलब क्या है।

एक व्याख्या या एक सरल कोड उदाहरण वास्तव में मेरे दिन करना होगा। धन्यवाद!

अद्यतन

यहाँ है कि मैं क्या अभी है। मैं स्पष्ट रूप से गलत कर रहा हूं, बस यह नहीं पता कि कहां है।

 
public static Bitmap getRemoteImage(String imageUrl) { 
     URL aURL = null; 
     URLConnection conn = null; 
     Bitmap bmp = null; 

     CacheResult cache_result = CacheManager.getCacheFile(imageUrl, new HashMap()); 

     if (cache_result == null) { 
      try { 
       aURL = new URL(imageUrl); 
       conn = aURL.openConnection(); 
       conn.connect(); 
       InputStream is = conn.getInputStream(); 

       cache_result = new CacheManager.CacheResult(); 
       copyStream(is, cache_result.getOutputStream()); 
       CacheManager.saveCacheFile(imageUrl, cache_result); 
      } catch (Exception e) { 
       return null; 
      } 
     } 

     bmp = BitmapFactory.decodeStream(cache_result.getInputStream()); 
     return bmp; 
    } 
+0

क्या त्रुटियों आप इस कोड के साथ मिलता है? – Janusz

+0

ई/AndroidRuntime (3097): गंभीर अपवाद: मुख्य ई/AndroidRuntime (3097): java.lang.NullPointerException ई/AndroidRuntime (3097): android.webkit.CacheManager.saveCacheFile (CacheManager.java:459) पर मैं जब कैश करने के लिए बचाने की कोशिश, एक इनाम कहा कि यदि यह संभव है मुझे पता है कि कैसे करना चाहते हैं प्राप्त होता है। ई/एंड्रॉइड रनटाइम (30 9 7): android.webkit.CacheManager.saveCacheFile (CacheManager.java:453) – HaMMeReD

उत्तर

10

मुझे नहीं लगता कि के रूप में इस बग रिपोर्ट http://code.google.com/p/android/issues/detail?id=7222

+0

यह सही है .. मेरे पास एक ही समस्या थी और संघर्ष के दो दिनों के बाद मैंने उस बग रिपोर्ट को पढ़ा :) –

+1

यदि आप हैं http://stackoverflow.com/questions/tagged/android-volley –

1

मैं थोड़ी देर पहले के साथ-साथ इस मुद्दे में आए में नोट CacheManger एक WebView के बाहर इस्तेमाल किया जा सकता है। कैश प्रबंधक केवल वेबव्यू के लिए है और इसके बाहर वास्तव में उपयोगी नहीं है। मेरे आवेदन के लिए मुझे एक्सएमएल प्रतिक्रियाओं और छवियों को कैश करने की आवश्यकता थी, इसलिए मैंने इसे पूरा करने के लिए अपना खुद का कैश प्रबंधक लिखना समाप्त कर दिया। कुछ भी भयानक नहीं है लेकिन निश्चित रूप से एक अंतर्निहित एक का उपयोग करने के रूप में आसान नहीं है।

आप बारीकियों के बारे में कोई प्रश्न हैं, तो मेरी पोस्ट के लिए एक टिप्पणी जोड़ने के लिए, मैं वापस अक्सर जाँच।

+0

आप कार्यान्वयन के बारे में अधिक जानकारी प्रदान कर सकते हैं: के लिए एंड्रॉयड तो एक ही विकल्प पर HTTP अनुरोध कैशिंग देख वॉली है? – sabbour

+0

@sabbour आप क्या जानना चाहते हैं? असल में मैंने एक http स्ट्रीम खोला और इसे एक फाइल में लिखा। जब मेरे एप्लिकेशन ने उस फ़ाइल तक पहुंचा तो फ़ाइल की उम्र की जांच की, अगर यह बहुत पुराना था तो यह इसे हटा देता है, इसलिए मेरा ऐप एक नई प्रति डाउनलोड करने के लिए जानता है। – smith324

संबंधित मुद्दे