मैं जो करने की कोशिश कर रहा हूं वह यह है: मैं चाहता हूं कि मेरा एप्लिकेशन इंटरनेट से एक छवि डाउनलोड करें और इसे सहेजें उस स्थान पर फ़ोन की आंतरिक मेमोरी जो एप्लिकेशन के लिए निजी है। यदि सूची आइटम के लिए कोई छवि उपलब्ध नहीं है (यानी यह इंटरनेट पर नहीं मिल पाती है), तो मैं एक डिफ़ॉल्ट प्लेसहोल्डर छवि प्रदर्शित करना चाहता हूं। यह वह छवि है जिसे मैंने अपनी list_item_row.xml फ़ाइल में डिफ़ॉल्ट रूप से परिभाषित किया है।एंड्रॉइड - वेब से छवि डाउनलोड करना, ऐप से निजी स्थान पर आंतरिक मेमोरी में सहेजना, सूची आइटम के लिए प्रदर्शित करना
मेरी सूची एक्टिविटी फ़ाइल में, मैं लिखित कस्टम कसर एडाप्टर क्लास का एक उदाहरण बुला रहा हूं। यह कस्टमकर्स एडाप्टर में है जहां मैं सभी सूची आइटमों के माध्यम से पुनरावृत्ति कर रहा हूं और परिभाषित करता हूं कि छवियों को आंतरिक मेमोरी से पढ़ने की कोशिश करके छवियों को किस प्रकार मैप किया जाना चाहिए।
मैंने इस विषय पर कई प्रश्न देखे हैं, लेकिन उदाहरण या तो बाहरी फोन मेमोरी (जैसे एसडीकार्ड) के लिए विशिष्ट हैं, इसमें छवियों के बजाय तारों को सहेजना शामिल है, या फ़ाइल के संकल्प को कम करने के लिए बिटमैप.कंप्रेसफॉर्मैट का उपयोग करना शामिल है (जो मेरे मामले में अनावश्यक है, क्योंकि ये छवियां पहले से ही छोटे संकल्प के छोटे थंबनेल होंगे)। प्रत्येक उदाहरण से कोड को टुकड़ा करने की कोशिश करना कठिन रहा है, इसलिए मैं अपने विशिष्ट उदाहरण के बारे में पूछ रहा हूं।
फिलहाल, मेरा मानना है कि मैंने वैध कोड लिखा है, लेकिन डिफ़ॉल्ट प्लेसहोल्डर छवि सहित मेरी सूची आइटमों के लिए कोई छवि प्रदर्शित नहीं हो रही है। मुझे नहीं पता कि समस्या अमान्य डाउनलोड/सेव कोड, या अमान्य पढ़ने कोड के कारण हो रही है - यह मदद नहीं करता है कि मुझे यह नहीं पता कि आंतरिक स्मृति को कैसे जांचें, यह देखने के लिए कि छवि मौजूद है या नहीं।
वैसे भी, मेरा कोड यहां है। किसी भी तरह की सहायता का स्वागत किया जाएगा।
ProductUtils.java
public static String productLookup(String productID, Context c) throws IOException {
URL url = new URL("http://www.samplewebsite.com/" + productID + ".jpg");
URLConnection connection = url.openConnection();
InputStream input = connection.getInputStream();
FileOutputStream output =
c.openFileOutput(productID + "-thumbnail.jpg", Context.MODE_PRIVATE);
byte[] data = new byte[1024];
output.write(data);
output.flush();
output.close();
input.close();
}
CustomCursorAdapter.java
public class CustomCursorAdapter extends CursorAdapter {
public CustomCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ImageView thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
String fileName =
cursor.getString(cursor.getColumnIndex(DbAdapter.KEY_IMAGE_FILE_PATH));
Bitmap bMap = BitmapFactory.decodeFile(fileName);
thumbnail.setImageBitmap(bMap);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.list_item_row, parent, false);
bindView(v, context, cursor);
return v;
}
}
फिर मेरा प्रश्न मान्य था: "लॉग को लिखें ताकि आप सुनिश्चित हों कि आपने एक ही फाइल लिख ली है और पढ़ा है?"। – dacwe
मूल रूप से, मुझे पता नहीं था कि फ़ाइल नाम से अधिक कुछ भी आवश्यक था और मैंने सोचा था कि एप्लिकेशन उस विशिष्ट पथ से स्वयं जागरूक था जहां फ़ाइल होगी। – Keeb13r