BitmapFactory.decodeFile returns fileNotFoundException
11,426
Solution 1
Try this....image uri
Uri imageUri = data.getData();
try {
bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
iv_profile.setImageBitmap(bm);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Solution 2
Thanks for the responses, it put me in the right direction. Eventually this post helped me further: https://stackoverflow.com/a/2636538/3287175
Author by
vaultboy
Updated on June 25, 2022Comments
-
vaultboy about 2 years
I have a problem concerning the BitMapFactory.decodeFile.
In my app, I want to user to be able to select an image from his/her device or take a photograph. This must then be displayed in an ImageView (medication_photo). I try to downscale the image as well because in my previous code I got OutOfMemory errors.
The problem is that after selecting an image, my app throws this exception:
FileNotFoundException: Unable to decode stream: java.io.FileNotFoundException: /content:/media/external/images/media/1499: open failed: ENOENT (No such file or directory)
Code snippet:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_PHOTO) { if (resultCode == RESULT_OK) { String result = data.getDataString(); setPhoto(result); } } // browse photo if (requestCode == BROWSE_PHOTO) { if (resultCode == RESULT_OK) { String result = data.getDataString(); setPhoto(result); } if (resultCode == RESULT_CANCELED) { } } } private void setPhoto(String path) { // re-scale image first try { File file = new File(path); Log.e("MedicationAdd.setPhoto->file",file.getAbsolutePath()); // this did not work BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path,options); // FileNotFound options.inSampleSize = scaleDownBitmap(options, options.outWidth, options.outHeight); Log.e("MedicationAdd.setPhoto->path",path); options.inJustDecodeBounds = false; this.bm = BitmapFactory.decodeFile(path,options); // FileNotFound this.medication_photo.setImageBitmap(this.bm); } catch (Exception e) { Log.e("MedicationAdd.setPhoto", e.toString()); } }
-
vaultboy over 10 yearsThis will probably work, but it causes OutOfMemory errors. I tried to downscale the image before it allocates memory.
-
Dev 9 over 10 yearshere is to use lazyloding. use below link..stackoverflow.com/questions/21598984/…
-
vaultboy over 10 yearsThe 'File file = new File(path);' I forgot to remove, I do not use it. The path is passed to setPhoto from onActivityResult.
-
vaultboy over 10 yearsI still don't understand, it works when I use MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); So how can I find the right path?