【问题标题】:Type mismatch in Geocoder Address地理编码器地址中的类型不匹配
【发布时间】:2023-03-25 13:48:01
【问题描述】:

我正在 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

}

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

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

【问题讨论】:

    标签: android layout kotlin google-geocoder


    【解决方案1】:

    该错误的原因可能是错误的导入。错误消息说它需要一个 xxx.com.Address 对象列表(查看您定义 val address: List&lt;Address&gt; 的位置),而它找到了一个 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

    【讨论】:

    • 我检查了导入并更正了它们。错误信息消失了
    【解决方案2】:

    更改address的声明

    val address: MutableList<Address>
    

    List 是不可变的,但你会得到一个可变列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2013-09-28
      • 2011-03-18
      • 2015-12-08
      相关资源
      最近更新 更多