Как получить список Lat Longs определенного типа, используя Google Places API, без двойного запроса? - PullRequest
0 голосов
/ 05 октября 2018

Это мой код

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))
                }
            }
        }
    }

Для каждого супермаркета, который он находит, он должен запросить снова, чтобы получить лат, пока эта информация не включена в прогноз автозаполнения, толькоидентификатор места.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы можете попробовать это.Это сработало нормально.

  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()

Надеюсь, это поможет вам.

0 голосов
/ 12 октября 2018

Вы не можете сохранить двойной вызов, насколько я могу судить, но, поскольку вы получаете список обратно, вы можете сохранить n номеров вызовов с помощью вызова getPlaceById (String ... placeIds).

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))
            }
        }
    }
}
...