Was ich versuche, ist Folgendes: Ich möchte, dass meine Anwendung ein Bild aus dem Internet herunterlädt und es im internen Speicher des Telefons an einem Ort speichert, der der Anwendung vorbehalten ist. Wenn für das Listenelement kein Bild verfügbar ist (d. h. es kann nicht im Internet gefunden werden), soll ein Standardplatzhalterbild angezeigt werden. Dies ist das Bild, das ich in meiner Datei list_item_row.xml als Standard definiert habe.
In meiner ListActivity-Datei rufe ich eine Instanz einer CustomCursorAdapter-Klasse auf, die ich geschrieben habe. Im CustomCursorAdapter durchlaufe ich alle Listenelemente und definiere, welche Inhalte den Ansichten zugeordnet werden müssen, einschließlich der Bilddatei, indem ich versuche, sie aus dem internen Speicher zu lesen.
Ich habe mehrere Fragen zu diesem Thema gesehen, aber die Beispiele sind entweder spezifisch für externen Telefonspeicher (z.B. SDCard), beinhalten das Speichern von Zeichenketten anstelle von Bildern, oder beinhalten die Verwendung von Bitmap.CompressFormat, um die Auflösung der Datei zu reduzieren (was in meinem Fall unnötig ist, da diese Bilder kleine Miniaturbilder mit bereits geringer Auflösung sein werden). Der Versuch, den Code aus den einzelnen Beispielen zusammenzusetzen, war schwierig, daher meine Frage zu meinem speziellen Beispiel.
Im Moment glaube ich, dass ich einen gültigen Code geschrieben habe, aber es wird kein Bild für meine Listenelemente angezeigt, auch nicht das Standard-Platzhalterbild. Ich weiß nicht, ob das Problem durch ungültigen Download/Speichercode oder ungültigen Lesecode verursacht wird - es hilft auch nicht, dass ich nicht weiß, wie ich den internen Speicher überprüfen kann, um zu sehen, ob das Bild existiert.
Wie auch immer, hier ist mein Code. Jede Hilfe würde sehr geschätzt werden.
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();
}
BenutzerdefinierterCursorAdapter.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;
}
}