在GeoCoder地址中获取maxAddressLineIndex的大小0

时间:2019-12-06 10:39:50

标签: android google-maps kotlin google-geocoder geocoder

我已经在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

地址地址[0] 具有值。我通过调试检查。

这就是为什么我的for循环不在内部执行的原因。

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

2 个答案:

答案 0 :(得分: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大于零。

效果很好。

答案 1 :(得分: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)
            }

这应该可以解决问题。