1

我在 Kotlin 中做了如下操作,以便在 Android 中使用 GeoCoder 从 LatLng 获取地址:

 private fun getAddress(latLng: LatLng): String {
    // 1
    val geocoder = Geocoder(this)
    val addresses: List<Address>?
    val address: Address?
    var addressText = ""

    try {
        // 2
        addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1)
        // 3
        if (null != addresses && !addresses.isEmpty()) {
            address = addresses[0]
            for (i in 0 until address.maxAddressLineIndex) {
                addressText += if (i == 0) address.getAddressLine(i) else "\n" + address.getAddressLine(i)
            }
        }
    } catch (e: IOException) {
        Log.e("MapsActivity", e.localizedMessage)
    }

    Log.e("ADDRESS TEXT >>",""+addressText)

    return addressText
}

但是,address.maxAddressLineIndex得到0

addressaddresses[0]具有值。我通过调试检查了它。

这就是为什么我的 for 循环没有在里面执行。

可能是什么问题?请提供任何解决方案。

4

2 回答 2

0

我不太确定您要实现什么,但我相信您想根据给定的坐标访问地址。我相信 for 循环正在执行,就像你说的那样,它返回值 0。这个零不是与坐标关联的地址数,而是可用 AddressLines 可以访问你提供的地址的索引。所以这意味着索引零处只有一个地址。

因此,既然您知道它是链接到这些坐标处的地址线的一个地址,那么您可以直接访问该索引处的数据。

if (null != addresses && !addresses.isEmpty()) {
    address = addresses[0]
    addressText = “$address.locality , $address.latitude” //etc and other methods You can access.....
}

希望它有所帮助,但如果您仍想通过循环访问地址,最好您的 maximumAddressLine 大于零。

它运作良好。

于 2020-05-11T23:07:29.643 回答
0

您面临的问题是 maxAddressLineIndex 返回从 0 开始的索引。

最快的解决方法是在 for 循环中添加 1,直到 address.maxAddressLineIndex。

for (i in 0 until address.maxAddressLineIndex + 1) {
                addressText += if (i == 0) address.getAddressLine(i) else "\n" + address.getAddressLine(i)
            }

这应该可以解决问题。

于 2021-02-15T23:38:01.607 回答