2015-07-28 5 views
0

Я следую за этим tutorial, чтобы сделать снимок, сохранить, масштабировать и использовать его в android. Однако при попытке открыть/получить сохраненное изображение я получаю ошибку Android: open failed: ENOENT (No such file or directory). После некоторого исследования я нашел этот пост, который предполагает, что эта проблема связана с файлами, которые содержат цифры в их именах, например мои, которым присвоено имя с текущей меткой времени. Я проверил, что изображения сохраняются в каталоге файлов, и я зашел в систему, чтобы убедиться, что имя файла, которое используется для их получения, совпадает с исходным именем. Вот часть моего кода, который дает ошибку:Android: open failed: ENOENT (Нет такого файла или каталога) Ошибка

private void setPic(ImageView myImageView) { 
    // Get the dimensions of the View 
    int targetW = myImageView.getWidth(); 
    int targetH = myImageView.getHeight(); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 
    Log.v("IMG Size", "IMG Size= "+String.valueOf(photoW)+" X "+String.valueOf(photoH)); 

    // Determine how much to scale down the image 
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 

    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 
    bmOptions.inPurgeable = true; 

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    myImageView.setImageBitmap(bitmap); 
} 

А вот что каротаж показывает мне:

E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /file:/storage/sdcard0/Pictures/JPEG_20150728_105000_1351557687.jpg: open failed: ENOENT (No such file or directory) 

И я пытаюсь открыть файл с именем: JPEG_20150728_105000_1351557687.jpg

+0

Это, вероятно, означает, что каталог в полном пути, который вы используете, не существует: создать его (с помощью .mkdirs(), и _DO не forget_ проверять возвращаемое значение) – fge

+0

@DerGol ... люм это вполне допустимый путь (ну, кроме файловых систем Windows). Конечно, можно задаться вопросом, действительно ли это предназначалось для использования 'file:/...' для URL-адреса файла, или же, что схема должна быть там вообще – fge

+0

@fge ОК, я попрошу лучше: вы храните ваши изображения ** здесь **: '/ file:/storage/sdcard0/...', на Android? –

ответ

1

Я загрузил ваш код и попытался использовать его в своем приложении. Найдено, что префикс /file: вызывает FileNotFoundException.

Замените свой метод следующим образом.

private void setPic(ImageView myImageView) { 
    // Get the dimensions of the View 
    int targetW = myImageView.getWidth(); 
    int targetH = myImageView.getHeight(); 

    String path = mCurrentPhotoPath.replace("/file:",""); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(path, bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 
    Log.v("IMG Size", "IMG Size= " + String.valueOf(photoW) + " X " + String.valueOf(photoH)); 

    // Determine how much to scale down the image 
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 

    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 
    bmOptions.inPurgeable = true; 

    Bitmap bitmap = BitmapFactory.decodeFile(path, bmOptions); 
    myImageView.setImageBitmap(bitmap); 
} 
Смежные вопросы