Хранить и извлекать изображения в SDCard

1

У меня есть набор 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. Что не так в моем коде? Ответьте, пожалуйста. Спасибо заранее.

Теги:
android-sdcard

3 ответа

1

Попробуйте использовать приведенный ниже код:

    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

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

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

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

  • Также выходит ли код с любым из вышеперечисленных исключений? Распечатайте более иллюстративные сообщения, чем stacktrace. Что-то вроде этого:

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

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

НТН
Sriram

Ещё вопросы

Сообщество Overcoder
Наверх
Меню