Ответ 1
Он работает в Google Play Service 9.4.
AutocompleteFilter filter = new AutocompleteFilter.Builder()
.setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
.build();
Я пытаюсь внедрить новый API-интерфейс Places для Android в моем приложении, и я не могу понять, как установить фильтр для запроса. Вот мой код.
LatLng southWest = new LatLng(85, -180);
LatLng northEast = new LatLng(-85, 180);
LatLngBounds bounds = new LatLngBounds(southWest, northEast);
AutocompleteFilter filter = AutocompleteFilter.create(WHAT SHOULD GO HERE?);
PendingResult result = Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient,
search.getText().toString(), bounds, filter);
Как вы можете видеть, я следил за документацией, представленной google здесь, но я не говорю о том, как реализовать фильтр после прочтения Справочник API Я все еще не могу понять, как реализовать API.
Мне нужна помощь в определении того, что должно входить в качестве параметра для AutocompleteFilter.create()
для API. Я хочу фильтровать данные по городам
Спасибо
Он работает в Google Play Service 9.4.
AutocompleteFilter filter = new AutocompleteFilter.Builder()
.setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
.build();
Из документации:
Таблица 3: Поддерживаемые типы запросов автозаполнения
Вы можете ограничить результаты запроса автозаполнения места определенным типом, передав параметр types. Параметр указывает тип или коллекцию типов, как указано в приведенных ниже типах. Если ничего не указано, все типы возвращаются. В общем случае допускается только один тип. Исключением является то, что вы можете безопасно смешивать типы геокодов и типов, но обратите внимание, что это будет иметь тот же эффект, что и указание типов. Поддерживаемые типы:
геокод инструктирует службу автозаполнения места возвращать только результаты геокодирования, а не бизнес-результаты. Как правило, вы используете этот запрос для устранения неоднозначности результатов, когда указанное местоположение может быть неопределенным. адрес указывает службе автозаполнения места, чтобы возвращать только результаты геокодирования с точным адресом. Как правило, вы используете этот запрос, когда знаете, что пользователь будет искать полностью указанный адрес. учреждение инструктирует службу автозаполнения места возвращать только бизнес-результаты. коллекция типов (регионов) указывает службе Places возвращать любой результат, соответствующий следующим типам: местонахождение sublocality Почтовый индекс страна administrative_area_level_1 administrative_area_level_2 коллекция типов (городов) дает указание службе "Места" возвращать результаты, соответствующие локальности или Administrative_area_level_3.
источник: https://developers.google.com/places/supported_types
код:
List<Integer> filterTypes = new ArrayList<Integer>();
filterTypes.add( Place.TYPE_ESTABLISHMENT );
Вот как вам нужно устанавливать фильтры в вашем API автозаполнения.
List<Integer> filters = new ArrayList<Integer>();
filters.add(Place.TYPE_ADMINISTRATIVE_AREA_LEVEL_1);
mAutocompleteFilter = AutocompleteFilter.create(filters);
mGeoLocationAdapter = new GeoLocationAdapter(this,
android.R.layout.simple_list_item_1,
latLngBounds,
mAutocompleteFilter);
В Android поддерживаются только несколько типов, Вы получите
AutocompletePredictionBuffer{status=Status{statusCode=NETWORK_ERROR, resolution=null}}
если вы используете неподдерживаемые типы в качестве фильтров.
см. эту ссылку для поддерживаемых типов фильтров.
Если вы используете службы Google Play версии 8.4.0, вы можете использовать подкласс AutocompleteFilter.Builder для создания фильтра.
Это проще в использовании, так как вам не нужно вручную создавать список мест.
mAutocompleteFilter = AutocompleteFilter.Builder().
setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES).build();
mGeoLocationAdapter = new GeoLocationAdapter(this,
android.R.layout.simple_list_item_1,
latLngBounds,
mAutocompleteFilter);
Помните, что в настоящее время возникают проблемы совместимости при установке сервисов Google Play версии 8.4.0. Если вы столкнулись с этой проблемой, вы можете следить за ней , но я предлагаю вернуться к статическому устаревшему AutocompleteFilter.create(), если вы боретесь.