getData() 自迁移到 kotlin 后无法正常工作
getData() is not working since migration to kotlin
我是科特林的新手。我写了这段代码,它将从图像选择器中获取图像。
但是我在线上遇到错误:val filePath: Uri = attr.data.getData()
错误:未解决的参考。 kotlin 是否有任何变化,因为这段代码在 java 中正常工作(意味着我迁移到 kotlin)
另一个关于 imageStore(bitmap)
的错误:无法智能转换为位图。
我已经搜索了文档,但无法解决这 2 个问题。
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()
}
}
}
But I am getting error on line:val filePath: Uri = attr.data.getData() error: Unresolved reference
嗯,这意味着编译器无法理解你指的是什么。这样说对吗?
好吧,考虑到您没有任何名为 attr
的对象,编译器似乎是正确的。
这意味着您应该删除 attr
部分,例如:
val filePath: Uri = data?.getData() ?: return
这里的return如果intent中的数据为null
将停止执行方法的其余部分
要解决你的第二个问题,你需要这样的东西:
bitmap?.let { bitmapInstance ->
imageStore(bitmapInstance)
}
这是做什么的?
好吧,它使您可以线程安全地访问您的位图对象,并确保该实例不为空。
将这一行 val filePath: Uri = attr.data.getData()
替换为
val filePath: Uri = data!!.getData()!!
更新代码
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
val filePath: Uri = data!!.getData()!!
try {
val inputStream: InputStream? = contentResolver.openInputStream(filePath)
var bitmap = BitmapFactory.decodeStream(inputStream)
imageStore(bitmap)
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
}
正如@a_local_nobody所说“迁移工具并不完美”,我学习了 kotlin 的基础知识,发现以下代码对我来说工作得很好。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
val filePath = data.data
try {
val inputStream = contentResolver.openInputStream(filePath!!)
bitmap = BitmapFactory.decodeStream(inputStream)
imageView!!.setImageBitmap(bitmap)
imageStore(bitmap)
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
super.onActivityResult(requestCode, resultCode, data)
}
我是科特林的新手。我写了这段代码,它将从图像选择器中获取图像。
但是我在线上遇到错误:val filePath: Uri = attr.data.getData()
错误:未解决的参考。 kotlin 是否有任何变化,因为这段代码在 java 中正常工作(意味着我迁移到 kotlin)
另一个关于 imageStore(bitmap)
的错误:无法智能转换为位图。
我已经搜索了文档,但无法解决这 2 个问题。
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()
}
}
}
But I am getting error on line:val filePath: Uri = attr.data.getData() error: Unresolved reference
嗯,这意味着编译器无法理解你指的是什么。这样说对吗?
好吧,考虑到您没有任何名为 attr
的对象,编译器似乎是正确的。
这意味着您应该删除 attr
部分,例如:
val filePath: Uri = data?.getData() ?: return
这里的return如果intent中的数据为null
将停止执行方法的其余部分要解决你的第二个问题,你需要这样的东西:
bitmap?.let { bitmapInstance ->
imageStore(bitmapInstance)
}
这是做什么的?
好吧,它使您可以线程安全地访问您的位图对象,并确保该实例不为空。
将这一行 val filePath: Uri = attr.data.getData()
替换为
val filePath: Uri = data!!.getData()!!
更新代码
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
val filePath: Uri = data!!.getData()!!
try {
val inputStream: InputStream? = contentResolver.openInputStream(filePath)
var bitmap = BitmapFactory.decodeStream(inputStream)
imageStore(bitmap)
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
}
正如@a_local_nobody所说“迁移工具并不完美”,我学习了 kotlin 的基础知识,发现以下代码对我来说工作得很好。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
val filePath = data.data
try {
val inputStream = contentResolver.openInputStream(filePath!!)
bitmap = BitmapFactory.decodeStream(inputStream)
imageView!!.setImageBitmap(bitmap)
imageStore(bitmap)
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
super.onActivityResult(requestCode, resultCode, data)
}