मैं इन पिछले निर्देशों के अनुसार छवियों को डाउनलोड करते समय Android के सिस्टम कैश का उपयोग करना चाहूंगा: एंड्रॉइड सिस्टम कैश ए>। मैं निम्नलिखित कोड काम करने में सक्षम था लेकिन लॉग स्टेटमेंट मुझे बता रहे हैं कि छवियों को कैश से कभी नहीं पढ़ा जा रहा है।

try {
    //url = new URL("http://some.url.com/retrieve_image.php?user=" + username);
    URL url = new URL("http://some.url.com/prof_pics/b4fe7bdfa174ff372c9f26ce6f78f19c.png");
    URLConnection connection = url.openConnection();
    connection.setUseCaches(true);
    Object response = connection.getContent();
    if (response instanceof Bitmap) {
        Log.i("CHAT", "this is a bitmap");
        current_image.setImageBitmap((Bitmap) response);
    }
    else {
        Log.i("CHAT", "this is not a bitmap");
        Log.i("CHAT", response.toString());
        InputStream is = connection.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        current_image.setImageBitmap(BitmapFactory.decodeStream(bis));
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

मैंने दो अलग-अलग प्रकार के अनुरोधों की कोशिश की है, एक PHP स्क्रिप्ट के माध्यम से जाना है जो छवि देता है और दूसरा जो सीधे छवि फ़ाइल तक पहुंच रहा है। मैं एक ही छवि को लगातार कई बार रीफ्रेश करता हूं और ऐसा कभी कैश नहीं होता है। प्रत्यक्ष छवि पहुंच के लिए, मुझे मिलता है:

05-31 23:45:12.177 I/CHAT    ( 2995): this is not a bitmap
05-31 23:45:12.177 I/CHAT    ( 2995): org.apache.harmony.luni.internal.net.www.protocol.http.FixedLengthInputStream@40c1c660`

अप्रत्यक्ष छवि पहुंच के लिए, मुझे लगातार मिलता है:

05-31 23:45:14.550 I/CHAT    ( 2995): this is not a bitmap
05-31 23:45:14.550 I/CHAT    ( 2995): org.apache.harmony.luni.internal.net.www.protocol.http.ChunkedInputStream@40c02448
2
ravishi 1 जून 2011, 11:11

1 उत्तर

सबसे बढ़िया उत्तर

मुझे इसे करने का एक बेहतर तरीका मिला। अगर एंड्रॉइड सिस्टम कैशे लिंक का अनुसरण करने के बाद किसी और को परेशानी हो रही है, तो इस Google डेवलपर की ब्लॉग पोस्ट। उस ब्लॉग पोस्ट में स्रोत कोड एक सूची दृश्य के लिए डिज़ाइन किया गया है लेकिन मैं इसे सभी छवि पुनर्प्राप्ति के लिए उपयोग कर रहा हूं। यह एक AsyncTask में छवि डाउनलोड करता है, डाउनलोड करते समय एक अस्थायी छवि डालता है, और एक छवि कैश है। यह अंतिम भाग ब्लॉग पोस्ट में "भविष्य की वस्तु" के रूप में सूचीबद्ध है, लेकिन यदि आप स्रोत कोड डाउनलोड करते हैं, तो कैश लागू हो जाता है। मुझे कोड को थोड़ा संशोधित करना पड़ा क्योंकि AndroidHttpClient 2.1 में समर्थित नहीं है। मैंने इसे एक यूआरएल कनेक्शन में बदल दिया। अब तक, यह एक बेहतरीन इमेज डाउनलोडर क्लास लगता है। आइए उम्मीद करते हैं कि यह हमारे पहले से ही संघर्षरत स्मृति प्रबंधन मुद्दों को प्रभावित नहीं करता है।

4
Community 23 मई 2017, 15:04