我尝试从图库中打开图像并在同一活动中在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(没有这样的文件或目录)
这是我的代码:-
打开图库的按钮单击事件:-
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)
}
})
此用于在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))
}
}
答案 0 :(得分:0)
query()
不需要返回可以使用的文件系统路径。
相反,将您的Uri
传递到您喜欢的图像加载库(Glide,Picasso等)。他们可以将图像加载到您的ImageView
中,并在后台线程上执行所有I / O。