Подтвердить что ты не робот

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);
4b9b3361

Ответ 2

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

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

Ответ 3

Вместо использования 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);

Ответ 4

BitmapFactory.decodeFile ожидает путь к файлу без схемы. Т.е. без file:// в начале.

Если вы обрабатываете Uri, не просто .toString(), а вместо этого вызовите .getPath() и передайте это методу.

Ответ 5

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

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

Ответ 6

Для меня я получал изображение из локально сохраненного 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);