Хранить и извлекать изображения в SDCard - PullRequest
1 голос
/ 25 марта 2011

У меня есть набор URL-адресов изображений.Я загружаю это в растровое изображение.Теперь я хочу сохранить эти изображения в папке sdcard / project.Если у меня нет такого файла, я должен его создать.Сейчас я сделал следующее:

String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
File file = new File(path, imageName);
if(!file.exists()) {
    file.mkdir();
    try {
        fOut = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
        fOut.flush();
        fOut.close();
        MediaStore.Images.Media.insertImage(getContentResolver(), "file://"
            + file.getAbsolutePath(), file.getName(), file.getName());

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}   

Но я не вставляю изображения в SDCard.Что не так в моем коде?Ответьте, пожалуйста.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 25 марта 2011

Попробуйте использовать следующий код:

    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    String fileName = edtNameImage.getText().toString().trim();//this can be changed
    if (fileName.equalsIgnoreCase("")) {
        Toast.makeText(context, "Fields cannot be left blank",
                Toast.LENGTH_SHORT).show();
        return false;
    }
    File file = new File(Environment.getExternalStorageDirectory()
            + File.separator + fileName);
    // write the bytes in file
    FileOutputStream fo;
    try {
        file.createNewFile();
        fo = new FileOutputStream(file);//snapshot image is the image to be stored.

        if (snapShotImage!=null)
        {
            snapShotImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        }else{
            return false;
        }
        fo.write(bytes.toByteArray());
        // ChartConstants.IMAGE_STORAGE++;
        fo.flush();
        fo.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    return true;

Вы также можете проверить наличие дубликатов в именах с помощью некоторых дополнительных строк кода.Дайте мне знать, если это поможет.

0 голосов
/ 25 марта 2011

Проблемы с вашим кодом:
1) Вы создаете каталог с именем файла. Вместо этого попробуйте mkdir () только с «path»
2) Передать только функцию file.getAbsolutePath () без функции file: // функции insertImage ()
3) Существует альтернативный API для insertImage , для которого вам не нужно создавать еще один файл локально. Передайте растровое изображение непосредственно к этому.

Надеюсь, это поможет.

0 голосов
/ 25 марта 2011
  1. Убедитесь, что в вашем файле Manifest.xml установлены соответствующие разрешения для записи / чтения с внешнего устройства хранения?

  2. Кроме того, код завершается с любым из вышеупомянутых исключений?Напечатайте больше иллюстративных сообщений, чем стековая трассировка.Примерно так:

    try {
    } catch (FileNotFoundException e) {
    Log.v (this.toString (), "Исключение поймано в блоке");
    }

или что-то в этих строках ..

HTH
Шрирам

...