Android: decodeFile всегда возвращает значение null для файла во внутреннем хранилище

У меня есть файл, сохраненный локально в частном хранилище приложения. Я проверил его существование, однако всякий раз, когда я вызываю BitmapFactory.decodeFile, он всегда возвращает null.

Если я сохраню файл в качестве ресурса и использую ImageView setImageResource, он всегда отображается нормально.

В чем проблема?

Вот фрагмент:

filename = "test.png"; if (doesFileExist(filename)) Bitmap bMap = BitmapFactory.decodeFile(filename); 

Я также пробовал:

 Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath() + filename); 

Solutions Collecting From Web of "Android: decodeFile всегда возвращает значение null для файла во внутреннем хранилище"

На этот вопрос был дан ответ так, как здесь: BitmapFactory.decodeFile возвращает нулевое изображение

Это было именно то, что мне нужно:

 String fname=new File(getFilesDir(), "test.png").getAbsolutePath(); 

Люди, файлы, хранящиеся в ресурсе приложения, должны ссылаться особым образом. Например, если файл находится в активах и называется «myfile.png», на него должны быть указаны:

 String uriString="file:///android_asset/myfile.png"; Uri uri=Uri.parse(uriString); 

Вместо использования BitmapFactory.decodeFile попробуйте использовать 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); 

Не могли бы вы попробовать fileList ()? Это

Возвращает массив строк, называя частные файлы, связанные с этим пакетом приложений Context.

Для меня я получал изображение из локально сохраненного URL-адреса, например, «file: /// storage / emulated / 0 / ….» (я использовал плагин Phonegap для захвата изображения. Плагин давал мне путь к изображению, который мне нужно Использовать в собственном коде)

Вот фрагмент кода, который работал для меня.

 String captured_image_info = "file:///storage/emulated/0/Android/data/com.testapp/cache/1493809796526.jpg" Uri uri=Uri.parse(captured_image_info); largeLog("uri", "" + uri); InputStream imageStream = getContentResolver().openInputStream(uri); Bitmap bm = BitmapFactory.decodeStream(imageStream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object byte[] decodedBytes = baos.toByteArray(); Bitmap img_captured_image = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);