我已经在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循环不在内部执行的原因。
可能是什么问题?请提供任何解决方案。
答案 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)
}
这应该可以解决问题。