Google places getPlaceID возвращает ненулевой массив, но фильтр возвращает нулевые результаты

#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 помощью фильтра.