这是我的代码
mGeoDataClient.getAutocompletePredictions("Supermarket", null, null).addOnSuccessListener {
it.forEach {
it.placeId?.let {
mGeoDataClient.getPlaceById(it).addOnSuccessListener {
val marker = it[0].latLng
val name = it[0].name.toString()
mMap.addMarker(MarkerOptions().position(marker).title(name))
}
}
}
}
对于每家超市,只要自动完成预测中不包含此信息,它就不得不再次请求获取经纬度。
有更好的方法吗?
答案 0 :(得分:1)
就我所知,您无法保存两次调用,但是由于您要返回列表,因此可以使用getPlaceById(String ... placeIds)调用来保存n个调用。
mGeoDataClient.getAutocompletePredictions("Supermarket", null, null).addOnSuccessListener {
it.map{ it.placeId}.filterNotNull().toTypedArray().let {
mGeoDataClient.getPlaceById(*it).addOnSuccessListener {
it.forEach{
val marker = it.latLng
val name = it.name.toString()
mMap.addMarker(MarkerOptions().position(marker).title(name))
}
}
}
}
答案 1 :(得分:0)
您可以尝试一下。效果很好。
mGeoDataClient?.getAutocompletePredictions("Supermarket", null, null)?.addOnSuccessListener{
it.forEach { prediction ->
val placeId = prediction.placeId
val pendingResult = Places.GeoDataApi.getPlaceById(mGoogleApiClient!!, placeId)
pendingResult.setResultCallback { placeBuffer->
val place = placeBuffer.get(0)
val marker = place.latLng
val name = place.name.toString()
mMap.addMarker(MarkerOptions().position(marker).title(name))
}
}
}
这是我的mGoogleApiClient
初始化的方式:
private var mGoogleApiClient: GoogleApiClient? = null
mGoogleApiClient = GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.addApi(Places.PLACE_DETECTION_API)
.enableAutoManage(this, this)
.build()
希望它可以为您提供帮助。