#java #android #geolocation #google-places-api #google-places
#java #Android #геолокация #google-places-api #google-places
Вопрос:
Я успешно внедрил Google places в свое приложение. Сейчас я пытаюсь отфильтровать результаты, вот мой массив результатов.
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, null);
2-й параметр для getCurrentPlace
— это параметр фильтра. Однако я использовал null
, я понятия не имею, как добавить фильтры к результатам. Я посмотрел на типы мест.
Поскольку у меня есть библиотека поблизости, я попробовал это:
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, Place.TYPE_LIBRARY);
Однако я получаю сообщение об ошибке
Ошибка:(98, 118) ошибка: несовместимые типы: int не может быть преобразован в PlaceFilter
Я просмотрел некоторые сообщения Stackoverflow, но они довольно старые, поэтому я не знаю, верны ли они больше. Все они говорят, что фильтры еще не полностью реализованы в Google places. Это все еще так? если нет, может кто-нибудь, пожалуйста, помогите
Спасибо
Обновление 1:
Итак, я нашел эту ссылку, чтобы найти идентификаторы мест для каждого типа: просто для тестирования я сделал это (в основном он должен снова печатать все местоположения в моем текстовом поле, как если бы оно было нулевым):
ArrayList<String> filter = new ArrayList<>();
for (int i =0; i< 5000; i ){
filter.add(String.valueOf(i));
}
PlaceFilter filterClosed = new PlaceFilter(false, filter);
а затем применил его:
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, filterClosed);
Тем не менее, я больше не получаю местоположения в текстовом поле, я получаю любую информацию о местоположении. Есть идеи, почему?
Обновление 2 Работая с информацией, которую вы предоставили в своем комментарии, я получил идентификаторы мест, используя метод getId, пожалуйста, обратитесь к скриншоту, который я загрузил в своем комментарии (stackoverflow больше не позволяет мне загружать ссылки). Итак, он дает мне идентификаторы, почему он ничего не возвращает, когда я применяю фильтры к результату? может ли кто-нибудь еще попробовать это, пожалуйста? вот мой код:
PlaceFilter filterClosed = null;
ArrayList<String> filter = new ArrayList<>();
for (int i =0; i < 45; i ){
filter.add(String.valueOf(i));
}
filterClosed = new PlaceFilter(false, filter);
txtLocation.setText(String.valueOf(filterClosed.getPlaceIds()));
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, filterClosed);
Я не понимаю, как использовать места, соответствующие bool val
Ответ №1:
Вторым аргументом должен быть PlaceFilter
объект, а не an int
.
List<String> filters = new ArrayList<>();
filters.add(Place.TYPE_LIBRARY);
PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(googleApiClient, PlaceFilter(true, filters));
Первый аргумент PlaceFilter
конструктора определяет, следует ли фильтровать только те места, которые открыты сейчас, или нет.
Смотрите Здесь полную ссылку на класс.
Комментарии:
1. Как именно я должен написать этот код? потому что, как вы предложили выше, вы создали массив, добавили несколько типов (которые, как я понимаю) Но что такое placeIDs здесь?
2. и фильтры никогда не используются
3. Моя ошибка, это должны были быть фильтры. Я обновил ответ.
4. Теперь я понимаю это немного лучше. Пожалуйста, обратитесь к моему обновленному сообщению OP
5. Попробуйте другие методы в
PlaceFilter
классе. Посмотрите, что вgetPlaceIds()
нем говорится: «возвращает набор идентификаторов мест, разрешенных этим фильтром, или пустой набор, если фильтрация по идентификаторам мест не выполняется». Также похоже, что вы используетеmatches(Place place)
для фильтрации результатов после их получения сnull
помощью фильтра.