Я пытаюсь сделать следующее: я хочу, чтобы мое приложение загружало изображение из Интернета и сохраняло его во внутренней памяти телефона в месте, которое является частным для приложения.Если для элемента списка нет изображения (то есть его нельзя найти в Интернете), я хочу, чтобы отображалось изображение заполнителя по умолчанию.Это изображение, которое я определил в своем файле list_item_row.xml по умолчанию.
В моем файле ListActivity я вызываю экземпляр класса CustomCursorAdapter, который я написал.Именно в CustomCursorAdapter я перебираю все элементы списка и определяю, какой контент необходимо сопоставить с представлениями, включая файл изображения, пытаясь прочитать его из внутренней памяти.
Я видел несколько вопросовна эту тему, но примеры либо относятся к внешней памяти телефона (например, SDCard), включают сохранение строк вместо изображений, либо использование Bitmap.CompressFormat для уменьшения разрешения файла (что в моем случае не является необходимым, так как эти изображениябудут маленькие миниатюры уже-маленького разрешения).Попытка собрать воедино код из каждого примера была трудной, поэтому я спросил о моем конкретном примере.
В настоящий момент я считаю, что написал правильный код, но изображение для моих элементов списка не отображается, включаяизображение заполнителя по умолчанию.Я не знаю, вызвана ли проблема неправильным кодом загрузки / сохранения или неправильным кодом чтения - не помогает, что я не знаю, как проверить внутреннюю память, чтобы увидеть, существует ли изображение.
В любом случае, вот мой код.Любая помощь будет принята с благодарностью.
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;
}
}