首页 > 解决方案 > 自迁移到 kotlin 以来,getData() 无法正常工作

问题描述

我是科特林的新手。我编写了这段代码,它将从图像选择器中获取图像。但我在网上遇到错误:val filePath: Uri = attr.data.getData() 错误:未解决的参考。kotlin 是否有任何变化,因为这段代码在 java 中工作正常(意味着我迁移到了 kotlin)

另一个错误 imageStore(bitmap)错误:智能转换为位图是不可能的。

我搜索了文档,但无法解决这两个问题。

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK && requestCode == 1) {
        val filePath: Uri = attr.data.getData()

        try {
            val inputStream: InputStream? = contentResolver.openInputStream(filePath)
            bitmap = BitmapFactory.decodeStream(inputStream)
            imageStore(bitmap)
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        }
    }
}

标签: androidkotlinmigrationuri

解决方案


但是我在线上遇到错误:val filePath: Uri = attr.data.getData() error: Unresolved reference

好吧,这意味着编译器无法理解您所指的内容。这样说对吗?

好吧,考虑到您没有任何命名的对象attr,编译器似乎是正确的。

这意味着您应该删除该attr部分,例如:

val filePath: Uri = data?.getData() ?: return

如果 Intent 中的数据为 null,则此处的 return 将停止执行其余的方法

要解决您的第二个问题,您需要这样的东西:

bitmap?.let { bitmapInstance ->
   imageStore(bitmapInstance)  
 }

这是做什么的?

好吧,它使您可以线程安全地访问位图对象,并确保实例不为空。


推荐阅读