Проблема 1: невозможно найти символьную переменную GEO_DATA_API
Решение 1: Прежде всего, давайте разберемся в использовании Places.GEO_DATA_API
Itговорит, что «API геоданных обеспечивает доступ к получению информации о местах по идентификатору места, автозаполнению поискового запроса пользователя по имени или адресу и добавлению новых мест в базу данных Google« Места ».»
source (https://developers.google.com/android/reference/com/google/android/gms/location/places/GeoDataApi)
Поэтому, если мы хотим получить информацию о месте из идентификатора места, мы должны использовать следующий код:
// Define a Place ID.
String placeId = "INSERT_PLACE_ID_HERE";
// Specify the fields to return (in this example all fields are returned).
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME);
// Construct a request object, passing the place ID and fields array.
FetchPlaceRequest request = FetchPlaceRequest.builder(placeId, placeFields).build();
placesClient.fetchPlace(request).addOnSuccessListener((response) -> {
Place place = response.getPlace();
Log.i(TAG, "Place found: " + place.getName());
}).addOnFailureListener((exception) -> {
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
int statusCode = apiException.getStatusCode();
// Handle error with given status code.
Log.e(TAG, "Place not found: " + exception.getMessage());
}
});
Проблема 2: не удается найти символьную переменную GeoDataApi
Решение 2: По мере того как новые места api указывает, что «Используйте findAutocompletePredictions () для возврата прогнозов места в ответ на пользовательские поисковые запросы. FindAutocompletePredictions () функционирует аналогично getAutocompletePredictions ()."
source (https://developers.google.com/places/android-sdk/client-migration)
Таким образом, чтобы получить автоматические полные прогнозы, мы можем использовать следующий код:
// Create a new token for the autocomplete session. Pass this to FindAutocompletePredictionsRequest,
// and once again when the user makes a selection (for example when calling fetchPlace()).
AutocompleteSessionToken token = AutocompleteSessionToken.newInstance();
// Create a RectangularBounds object.
RectangularBounds bounds = RectangularBounds.newInstance(
new LatLng(-33.880490, 151.184363),
new LatLng(-33.858754, 151.229596));
// Use the builder to create a FindAutocompletePredictionsRequest.
FindAutocompletePredictionsRequest request = FindAutocompletePredictionsRequest.builder()
// Call either setLocationBias() OR setLocationRestriction().
.setLocationBias(bounds)
//.setLocationRestriction(bounds)
.setCountry("au")
.setTypeFilter(TypeFilter.ADDRESS)
.setSessionToken(token)
.setQuery(query)
.build();
placesClient.findAutocompletePredictions(request).addOnSuccessListener((response) -> {
for (AutocompletePrediction prediction : response.getAutocompletePredictions()) {
Log.i(TAG, prediction.getPlaceId());
Log.i(TAG, prediction.getPrimaryText(null).toString());
}
}).addOnFailureListener((exception) -> {
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
Log.e(TAG, "Place not found: " + apiException.getStatusCode());
}
});