【问题标题】:How to use Android Places API AutocompleteFilter如何使用 Android Places API AutocompleteFilter
【发布时间】:2015-07-10 18:44:25
【问题描述】:

我正在尝试在我的应用程序中实现适用于 android 的新 Places API,但我似乎不知道如何为请求设置过滤器。这是我的代码。

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 here 提供的文档,但我没有谈论如何实现过滤器,在阅读了 API Reference 之后,我仍然无法弄清楚如何实现 API。

我需要帮助来确定 API 的 AutocompleteFilter.create() 参数应该包含哪些内容。我想按城市过滤数据

谢谢

【问题讨论】:

    标签: android google-maps autocomplete google-places-api


    【解决方案1】:

    来自文档:

    表 3:就地自动完成请求支持的类型

    您可以通过传递 types 参数来将 Place Autocomplete 请求的结果限制为特定类型。该参数指定类型或类型集合,如下面支持的类型中所列。如果未指定任何内容,则返回所有类型。通常只允许使用一种类型。例外情况是您可以安全地混合地理编码和机构类型,但请注意,这与不指定类型具有相同的效果。支持的类型有:

    geocode 指示 Place Autocomplete 服务仅返回地理编码结果,而不是业务结果。通常,您使用此请求来消除指定位置可能不确定的结果的歧义。 address 指示 Place Autocomplete 服务仅返回具有精确地址的地理编码结果。通常,当您知道用户将寻找完全指定的地址时,您会使用此请求。 建立指示 Place Autocomplete 服务仅返回业务结果。 (regions) 类型集合指示 Places 服务返回与以下类型匹配的任何结果: 地方性 次地方性 邮政编码 国家 行政区域级别_1 行政区域级别_2 (cities) 类型集合指示 Places 服务返回与 locality 或 Administrative_area_level_3 匹配的结果。

    来源:https://developers.google.com/places/supported_types

    代码:

        List<Integer> filterTypes = new ArrayList<Integer>();
        filterTypes.add( Place.TYPE_ESTABLISHMENT );
    

    【讨论】:

    • 嗨,保罗,你不知道如何将国家限制在边界框之外吗?谢谢。
    • 我实际上不确定这是否可能,但如果是我不知道。
    • 地址类型不存在...如果我想获得完整的地址结果,我应该使用哪些类型?
    • @Ivan 关于在国家/地区限制结果而不使用边界框,您有两种选择:使用 REST API 或遍历返回的建议并仅返回最后一个单词是您感兴趣的国家/地区的结果. 希望有帮助。
    • @AbhishekPatel 我们决定选择第二个选项。它工作正常。干杯!
    【解决方案2】:

    这就是您需要在 AutoComplete Place 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}}
    

    如果您使用不受支持的类型作为过滤器。

    查看此链接了解支持的过滤器类型。

    https://developers.google.com/places/supported_types#table3

    【讨论】:

      【解决方案3】:

      如果您使用 Google Play 服务版本 8.4.0,您可以使用子类 AutocompleteFilter.Builder 来创建过滤器。

      它更易于使用,因为您不必手动构建 Place 类型列表。

      mAutocompleteFilter = AutocompleteFilter.Builder().
          setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES).build();
      mGeoLocationAdapter = new GeoLocationAdapter(this,
              android.R.layout.simple_list_item_1,
              latLngBounds,
              mAutocompleteFilter);
      

      请注意,安装 google play services 8.4.0 版时当前存在兼容性问题。如果你遇到这个问题,你可以关注这个thread,但如果你遇到困难,我建议恢复到不推荐使用的静态AutocompleteFilter.create() 方法。

      【讨论】:

        【解决方案4】:

        它适用于 Google Play 服务 9.4。

        AutocompleteFilter filter = new AutocompleteFilter.Builder()
                .setTypeFilter(AutocompleteFilter.TYPE_FILTER_CITIES)
                .build();
        

        【讨论】:

        • 这是正确的解决方案,大家都应该使用这个
        猜你喜欢
        • 2017-03-24
        • 1970-01-01
        • 2016-04-07
        • 2011-04-19
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多