Intereting Posts
Андроид AlarmManager не пробуждает телефон вверх Scrollview не полностью прокручивается Android Studio – SDK устарел или отсутствует шаблоны Как получить сообщение без использования createChat для android XMPP chat smack api Тяжесть TextView Facebook Предварительный просмотр изображения отсутствует только при совместном использовании с Android Как управлять ограниченными профилями в приложении Android? Почему ADB Ubuntu не распознает мое устройство? SecurityException с grantUriPermission при совместном использовании файла с FileProvider Центрировать ListView на его текущем выборе Android Eclipse Classpath – хочу добавить путь к контейнеру класса, но eclipse не позволит мне ПРЕДУПРЕЖДЕНИЕ: компоновщик: libvc1dec_sa.ca7.so имеет перестановки текста. Это трата памяти и представляет угрозу безопасности. Пожалуйста исправьте Использование службы Google Play Services LocationClient в фоновом режиме Событие для состояния воспроизведения VideoView или воспроизведения / паузы MediaController Android Google плюс стиль кнопки входа в систему

Получить название города и почтовый индекс из Google Place API на Android

Я использую Google Place API для Android с автозаполнением

Все работает нормально, но когда я получаю результат, как показано здесь , у меня нет информации о городе и почтовом индексе.

private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback = new ResultCallback<PlaceBuffer>() { @Override public void onResult(PlaceBuffer places) { if (!places.getStatus().isSuccess()) { // Request did not complete successfully Log.e(TAG, "Place query did not complete. Error: " + places.getStatus().toString()); return; } // Get the Place object from the buffer. final Place place = places.get(0); // Format details of the place for display and show it in a TextView. mPlaceDetailsText.setText(formatPlaceDetails(getResources(), place.getName(), place.getId(), place.getAddress(), place.getPhoneNumber(), place.getWebsiteUri())); Log.i(TAG, "Place details received: " + place.getName()); } }; 

Класс Place не содержит этой информации. Я могу получить полный человеческий читаемый адрес, лат и длинный и т. Д.

Как я могу получить город и почтовый индекс из результата автозаполнения?

Обычно вы не можете получать имя города из места,
Но вы можете легко получить его таким образом:
1) Получить координаты с вашего места (или, тем не менее, вы их получите);
2) Используйте Geocoder для извлечения города по координатам.
Это можно сделать так:

 private Geocoder mGeocoder = new Geocoder(getActivity(), Locale.getDefault()); // ... private String getCityNameByCoordinates(double lat, double lon) throws IOException { List<Address> addresses = mGeocoder.getFromLocation(lat, lon, 1); if (addresses != null && addresses.size() > 0) { return addresses.get(0).getLocality(); } return null; } 

К сожалению, в настоящее время эта информация недоступна через Android API.

Он доступен с помощью веб-службы «Адреса сайтов» ( https://developers.google.com/places/webservice/ ).

Название города и почтовый код можно получить за 2 шага

1) Вызов веб-сервиса на https://maps.googleapis.com/maps/api/place/autocomplete/json?key=API_KEY&input=your_inpur_char . JSON содержит поле place_id которое можно использовать на шаге 2.

2) Сделайте еще один вызов веб-сервиса https://maps.googleapis.com/maps/api/place/details/json?key=API_KEY&placeid=place_id_retrieved_in_step_1 . Это вернет JSON, который содержит address_components . Пересечение types чтобы найти locality и postal_code может дать вам название города и почтовый индекс.

Код для его достижения

 JSONArray addressComponents = jsonObj.getJSONObject("result").getJSONArray("address_components"); for(int i = 0; i < addressComponents.length(); i++) { JSONArray typesArray = addressComponents.getJSONObject(i).getJSONArray("types"); for (int j = 0; j < typesArray.length(); j++) { if (typesArray.get(j).toString().equalsIgnoreCase("postal_code")) { postalCode = addressComponents.getJSONObject(i).getString("long_name"); } if (typesArray.get(j).toString().equalsIgnoreCase("locality")) { city = addressComponents.getJSONObject(i).getString("long_name") } } } 

Не лучший способ, но может быть полезно следующее:

  Log.i(TAG, "Place city and postal code: " + place.getAddress().subSequence(place.getName().length(),place.getAddress().length()));