Kotlin无法获得所需的类型干扰Array <Uri>!找到Array <Uri?>

时间:2019-07-25 15:12:21

标签: java android performance kotlin kotlin-android-extensions

我正在尝试使用uriArray来解析图像的路径,但是卡在了Kotlin中的某个点上,这给了我 Array!找到 Array 的问题>

 val uriArray = arrayOfNulls<Uri>(imageList.size)
                    for (i in imageList.indices) {
                        val imgaesModel = imageList.get(i)
                        uriArray[i] = Uri.parse("file:" + imgaesModel.getPath())
                    }
                    mFilePathCallback!!.onReceiveValue(uriArray)
           // Above line is giving error 

由于我是Kotlin的新手,请给我一些建议,我们将感激不尽。

2 个答案:

答案 0 :(得分:1)

由于您使用的是arrayOfNulls,因此您的uriArray由Uri组成? (可为空的Uri)元素。因此,onReceiveValue无法接收到预期的类型,该类型是Uri的数组,相反,它接收到Uri?的数组。我建议不要创建arrayOfNulls,而是使用kotlin中的map函数将imageList转换为Uri列表,然后将该列表转换为数组并使用它。

我想应该是这样的。

val uriList = imagesList.map {
    Uri.parse("file:" + it.getPath())
}
val uriArray = uriList.toTypedArray() // something like this just convert list to array :)
mFilePathCallback!!.onReceiveValue(uriArray)

答案 1 :(得分:1)

tasoluko回答的替代方法是

val uriArray = Array<Uri>(imageList.size) { i ->
    val imagesModel = imageList[i] // get method can be written as indexing
    Uri.parse("file:" + imagesModel.path) // instead of getPath()
}