Android - загрузка изображения из Интернета, сохранение во внутреннюю память в области, частной для приложения, отображение для элемента списка

Я пытаюсь сделать следующее: я хочу, чтобы мое приложение загружало изображение из Интернета и сохраняло его в телефоне » s внутренняя память в месте, которое является частным для приложения. Если для элемента списка нет изображения (т. Е. Его нельзя найти в Интернете), я хочу, чтобы отображалось изображение-заполнитель по умолчанию. Это изображение, которое я определил в моем файле list_item_row.xml по умолчанию.

В моем файле ListActivity я вызываю экземпляр написанного мной класса CustomCursorAdapter. Именно в CustomCursorAdapter я просматриваю все элементы списка и определяю, какой контент нужно сопоставить с представлениями, включая файл изображения, пытаясь прочитать его из внутренней памяти.

Я видел несколько вопросов по этому поводу. , но примеры относятся либо к внешней памяти телефона (например, SDCard), либо к сохранению строк вместо изображений, либо к использованию растрового изображения. 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;
    }
}
7
задан Keeb13r 15 November 2010 в 05:09
поделиться