E / BitmapFactory:无法解码流:java.io.FileNotFoundException用于(没有这样的文件或目录)

时间:2018-09-04 09:58:27

标签: android image kotlin gallery

我尝试从图库中打开图像并在同一活动中在Imageview中显示。我添加了 WRITE_EXTERNAL_STORAGE READ_EXTERNAL_STORAGE INTERNET 之类的权限。当我从图库中选择图像并返回活动时,它将显示这种类型的错误

  

09-04 15:02:57.161 31642-31642 / com.androidtutorialpoint.qrcodescanner E / BitmapFactory:无法解码流:java.io.FileNotFoundException:file:/ storage / emulated / 0 / Pictures / Screenshots / Screenshot_20180816- 160721.png(没有这样的文件或目录)

这是我的代码:-

  1. 打开图库的按钮单击事件:-

    btn?.setOnClickListener(object:View.OnClickListener {         重写fun onClick(arg0:View){

            val i = Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    
            startActivityForResult(i, RESULT_LOAD_IMAGE)
        }
    })
    
  2. 此用于在Imageview中显示图像:-

    重写乐趣onActivityResult(requestCode:Int,resultCode:Int,数据:Intent?){     super.onActivityResult(requestCode,resultCode,数据)

    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 :(得分:0)

query()不需要返回可以使用的文件系统路径。

相反,将您的Uri传递到您喜欢的图像加载库(Glide,Picasso等)。他们可以将图像加载到您的ImageView中,并在后台线程上执行所有I / O。