Android: decodeFile always returns null for file in internal storage
Solution 1
This question has been answered before such as here: BitmapFactory.decodeFile returns null even image exists
This was exactly what I needed:
String fname=new File(getFilesDir(), "test.png").getAbsolutePath();
Solution 2
Instead of using BitmapFactory.decodeFile, try using InputStream:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
InputStream imageStream = getContentResolver().openInputStream(selectedImage);
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
Solution 3
BitmapFactory.decodeFile
expects a file path without the scheme. I.e. without the file://
in the beginning.
If you're handling a Uri, don't just .toString()
it, but instead call .getPath()
on it, and pass that to the method.
Solution 4
Folks, files stored in app resource should be referenced in special way. E.g. if file is located in assets and named as "myfile.png" it has to be referenced as:
String uriString="file:///android_asset/myfile.png";
Uri uri=Uri.parse(uriString);
Solution 5
After adding the required permissions (READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE)
You need to add this line to manifests:
android:requestLegacyExternalStorage="true"
Comments
-
Jahmic almost 2 years
I have a file saved locally into the application's private storage. I have verified it exists, however whenever I call
BitmapFactory.decodeFile
it always returnsnull
.If I save the file as a resource and use
ImageView.setImageResource
, it always shows up fine.What is the problem?
Here is the snippet:
filename = "test.png"; if (doesFileExist(filename)) Bitmap bMap = BitmapFactory.decodeFile(filename);
I've also tried:
Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath() + filename);
-
Jahmic about 13 yearsActually, I used that to verify the file does in the Logcat output. So, the file is there.
-
Jahmic about 13 yearsGood info to know, but in this case, the file is downloaded into the app's private storage and not in the resources.
-
Jesse Black over 12 yearsyou SHOULD answer your own question. I landed on this question with the same problem and got the solution from you. The question you reference as having the answer wasn't in my initial search either. Cheers!