gpt4 book ai didi

android - 地理编码器地址中的类型不匹配

转载 作者:行者123 更新时间:2023-11-29 23:08:17 25 4
gpt4 key购买 nike

我正在 kotlin 中实现一个代码以在谷歌地图中显示地址。我将地址存储在 Firebase 中。我正在提取数据并将地址转换为字符串,然后尝试从中找到纬度和经度。这是我获取经纬度的代码:

   private fun getLocationFromAddress(context: Context, addkey: String?): LatLng? {

val coder = Geocoder(context)
val address: List<Address>
var p1: LatLng? = null
var strAddress = ""

try {

val user = FirebaseAuth.getInstance().currentUser
val userid = user?.uid
mRef = FirebaseDatabase.getInstance().reference.child("users").child(userid.toString()).child("users")

mRef.child(addkey.toString()).addValueEventListener(object: ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
}

override fun onDataChange(p0: DataSnapshot) {
strAddress = p0.child("****").child(addkey.toString()).child("***").getValue(String::class.java)

}

})
address = coder.getFromLocationName(strAddress, 5)
if (address == null) {
return null
}

val location = address[0]
p1 = LatLng(location.latitude, location.longitude)

} catch (ex: IOException) {

ex.printStackTrace()
}


return p1

}

但是,我在 address = coder.getFromLocationName(strAddress, 5) 处收到类型不匹配错误。

它说:“类型不匹配。 要求:列出“我的项目名称.com”。地址 发现:(可变)列表 android.location.Address!>!

最佳答案

该错误的原因很可能是导入错误。错误消息说它期待一个 xxx.com.Address 的列表对象(查看您定义 val address: List<Address> 的位置),同时找到 android.location.Address 的列表(这是 Geocoder API 返回的类型)。

通过改错import在你的文件的顶部声明你应该解决这个问题。或者,更好的是,您可以更改代码,以便仅在需要的地方定义变量,让 Kotlin 的类型推断发挥其“魔力”:

val address = coder.getFromLocationName(strAddress, 5)

编辑

在这种特定情况下,您可能仍想显式定义类型,因为您的 Kotlin 代码正在调用用 Java 编写的 API,该 API 不使用 @Nullable/@NotNull (或类似的注释),因此编译器无法正确推断无效性,结果类型是“平台类型”(即 SomeType! )。因此,如果您知道某些内容不应该为 null,则可以通过显式键入您的变量(或反之亦然)强制它为非 null:

val address: List<Address> = coder.getFromLocationName(strAddress, 5)

更多信息:Null-Safety and Platform Types .

关于android - 地理编码器地址中的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com