E / BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException для (нет такого файла или каталога) - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь открыть изображение из галереи и отобразить в Imageview в том же Activty. Я добавляю разрешения типа WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE , ИНТЕРНЕТ . когда я выбираю изображение из галереи и возвращаю активность, он отображает этот тип ошибки

09-04 15: 02: 57.161 31642-31642 / com.androidtutorialpoint.qrcodescanner E / BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException: файл: / storage / emulated / 0 / Pictures / Screenshots / Screenshot_20180816- 160721.png (нет такого файла или каталога)

Вот мой код: -

  1. Событие нажатия кнопки для открытой галереи: -

    btn? .SetOnClickListener (object: View.OnClickListener { переопределить веселье onClick (arg0: View) {

            val i = Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    
            startActivityForResult(i, RESULT_LOAD_IMAGE)
        }
    })
    
  2. Используется для отображения изображения в режиме просмотра изображений: -

    переопределить fun onActivityResult (requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult (requestCode, resultCode, data)

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == Activity.RESULT_OK && null != data) {
        val selectedImage = data.data
        val filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
    
        val cursor = contentResolver.query(selectedImage!!,
                filePathColumn, null, null, null)
        cursor!!.moveToFirst()
    
        val columnIndex = cursor.getColumnIndex(filePathColumn[0])
        val picturePath = cursor.getString(columnIndex)
        cursor.close()
    
        val imageView = findViewById(R.id.imageView) as ImageView
        imageView.setImageBitmap(BitmapFactory.decodeFile("file://" + picturePath))
    
    }
    

    }

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш query() не обязан возвращать путь к файловой системе, который вы можете использовать.

Вместо этого передайте Uri в свою любимую библиотеку загрузки изображений (Glide, Picasso и т. Д.). Они могут загрузить изображение в ваш ImageView, выполнив все операции ввода-вывода в фоновом потоке.

...