如何解析Android版Google Places GeoDataApi中的地址(缺少地址组件)

如何解析Android版Google Places GeoDataApi中的地址(缺少地址组件),android,google-places-api,Android,Google Places Api,我们使用与示例应用程序类似的GooglePlacesAPI预测。在选择结果时,我们使用以下方法获得预测位置的详细信息: Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId); 这很好,我的问题是结果只包含一个字符串作为地址 使用时,结果包含以下内容: "address_components" : [ { "long_name" : "522", "short_name" : "522",

我们使用与示例应用程序类似的GooglePlacesAPI预测。在选择结果时,我们使用以下方法获得预测位置的详细信息:

Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId);
这很好,我的问题是结果只包含一个字符串作为地址

使用时,结果包含以下内容:

"address_components" : [
     {
        "long_name" : "522",
        "short_name" : "522",
        "types" : [ "street_number" ]
     },
     {
        "long_name" : "Overtoom",
        "short_name" : "Overtoom",
        "types" : [ "route" ]
     },
     {
        "long_name" : "Amsterdam-West",
        "short_name" : "Amsterdam-West",
        "types" : [ "sublocality_level_1", "sublocality", "political" ]
     },
     {
        "long_name" : "Amsterdam",
        "short_name" : "Amsterdam",
        "types" : [ "locality", "political" ]
     },
     {
        "long_name" : "Amsterdam",
        "short_name" : "Amsterdam",
        "types" : [ "administrative_area_level_2", "political" ]
     },
     {
        "long_name" : "Noord-Holland",
        "short_name" : "NH",
        "types" : [ "administrative_area_level_1", "political" ]
     },
     {
        "long_name" : "Nederland",
        "short_name" : "NL",
        "types" : [ "country", "political" ]
     },
     {
        "long_name" : "1054",
        "short_name" : "1054",
        "types" : [ "postal_code_prefix", "postal_code" ]
     }
  ],
但是在Android上使用API时,上面的
地址\u组件
中的信息丢失了。

我如何使用Google places API在Android上获取这些信息?

不幸的是,答案是“你不能”

谷歌没有向该API的Android实现提供结构化响应数据

您可以尝试解析地址文本,但根据,这绝非小事:

  • 你可以想出一个聪明的方法来解析这个字符串。不幸的是,整个地区的实际街道/郊区/城镇/省份结构并不一致 不同的地区(如南非开普敦)有不同的 句子结构(南非约翰内斯堡)。所以你的解析 规则必须非常聪明
  • 您使用不同的谷歌API。JavaScript API为相关调用提供结构化数据。不幸的是,谷歌建议 反对使用这种技术

  • 我的一位同事在Google上记录了这个问题:


    Places SDK for Android现在支持地址\字段中的组件…:-)

    你解决了吗??我也有同样的问题???不,我被迫使用js api来获取此信息。尝试使用Geocoder.getFromLocationName(String locationName,int maxResults)此解决方案的副作用是,此api返回的地址字符串可能与您从google map SDK提供的google PlacePicker活动中选择的地址字符串不同。这会让用户感到困惑。你能不能重新表述一下你的答案,让我接受你的答案?