Ограничить использование API автозаполнения для городов определенного типа android
Я использую PlaceAutocompleteApi
из Служб Службы, то, что я хочу сделать, ограничивает автоматическое заполнение только для конкретной страны и города. Например. Все города от let говорят только Индия. Я использую AutocompleteFilter
для этого, но я не знаю, где указать страну, которую я хочу ограничить.
Вот мой код
List<Integer> autocompleteFilter = new ArrayList<>();
// autocompleteFilter.add(Place.TYPE_COUNTRY);
// autocompleteFilter.add(Place.TYPE_LOCALITY);
mAdapter = new PlaceAutocompleteAdapter(mContext,R.layout.layout_location_text,
mGoogleApiClient, BOUNDS, AutocompleteFilter.create(autocompleteFilter));
mTxtLocation.setAdapter(mAdapter);
mTxtLocation.setOnItemClickListener(mAutocompleteClickListener);
любые мысли по этому поводу?
Ответы
Ответ 1
Способ сделать это - добавить страну в качестве параметра components
к URL-адресу веб-службы:
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&components=country:in");
Для городов вы можете использовать тег administrative_area_level_3
:
sb.append("&components=administrative_area_level_3:bengaluru");
или, альтернативно, тег locality
:
sb.append("&components=locality:redmond");
Литература:
1. API геокодирования.
2. Типы адресов и типы компонентов.
3. Служба автозаполнения API Google Place в приложении для Android. p >
Ответ 2
Вот обходной путь (взломайте, если хотите), который я использовал. Он использует (использует) тот факт, что при преобразовании в строку каждый элемент ответа представляет собой строку, разделенную запятой. Выполните следующие шаги, прежде чем возвращать результат в getFilter()
.
- Получите предложения в
ArrayList
, назовите его returnedResults
.
- Теперь переходим через
returnedResults
и на каждой итерации получаем каждое предсказание в массив строк с помощью returnedResults.get(i).getFullText(xxx).toString().split(",")
.
- Если последний элемент этого массива - имя вашей страны, вставьте его в отдельную переменную
ArrayList
, позвоните на нее myResult
.
- return
myResult
.
Причиной использования отдельных переменных является то, что вы не сможете легко манипулировать исходным списком ответов. Этот подход работает как шарм!
Надеюсь, что это поможет.
Ответ 3
Отфильтровать результаты поиска по странам
// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
.setCountry("AU")
.build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);
Ответ 4
final StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&types=establishment");
sb.append("&location=locationLat,LocationLng");
sb.append("&radius=50000&strictbounds");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
Этот api ограничит поиск в области.