Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从Mapbox功能集合获取地址_Java_Android_Mapbox_Mapbox Android - Fatal编程技术网

Java Can';无法从Mapbox功能集合获取地址

Java Can';无法从Mapbox功能集合获取地址,java,android,mapbox,mapbox-android,Java,Android,Mapbox,Mapbox Android,我正在从mapbox返回一个featurecollection。JSON如下所示: {"type":"FeatureCollection","query":["17","green"],"features":[{"id":"address.8882296350520732","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"rooftop"},"text":"Green Street

我正在从mapbox返回一个featurecollection。JSON如下所示:

{"type":"FeatureCollection","query":["17","green"],"features":[{"id":"address.8882296350520732","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"rooftop"},"text":"Green Street","place_name":"17 Green Street, Brookline, Massachusetts 02446, United States","center":[-71.121411,42.343136],"geometry":{"type":"Point","coordinates":[-71.121411,42.343136]},"address":"17","context":[{"id":"postcode.8198763973790210","text":"02446"},{"id":"place.7864891969924050","wikidata":"Q49142","text":"Brookline"},{"id":"region.6776276020561540","short_code":"US-MA","wikidata":"Q771","text":"Massachusetts"},{"id":"country.9053006287256050","short_code":"us","wikidata":"Q30","text":"United States"}]},{"id":"address.2730621404747834","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"rooftop"},"text":"Greenough Circle","place_name":"17 Greenough Circle, Brookline, Massachusetts 02445, United States","center":[-71.125244,42.334561],"geometry":{"type":"Point","coordinates":[-71.125244,42.334561]},"address":"17","context":[{"id":"postcode.7679295126168220","text":"02445"},{"id":"place.7864891969924050","wikidata":"Q49142","text":"Brookline"},{"id":"region.6776276020561540","short_code":"US-MA","wikidata":"Q771","text":"Massachusetts"},{"id":"country.9053006287256050","short_code":"us","wikidata":"Q30","text":"United States"}]},{"id":"address.4738306377365208","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"interpolated"},"text":"Greenleaf Street","place_name":"17 Greenleaf Street, Boston, Massachusetts 02115, United States","center":[-71.090477,42.338387],"geometry":{"type":"Point","coordinates":[-71.090477,42.338387],"interpolated":true},"address":"17","context":[{"id":"neighborhood.295553","text":"Fenway"},{"id":"postcode.11169253348388930","text":"02115"},{"id":"place.9391334652012190","wikidata":"Q100","text":"Boston"},{"id":"region.6776276020561540","short_code":"US-MA","wikidata":"Q771","text":"Massachusetts"},{"id":"country.9053006287256050","short_code":"us","wikidata":"Q30","text":"United States"}]},{"id":"address.2688910343185888","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"point"},"text":"Greenwich Street","place_name":"17 Greenwich Street, Roxbury Crossing, Massachusetts 02120, United States","center":[-71.083751,42.335527],"geometry":{"type":"Point","coordinates":[-71.083751,42.335527]},"address":"17","context":[{"id":"neighborhood.295329","text":"South End"},{"id":"postcode.7229336676579040","text":"02120"},{"id":"place.2024861849164830","wikidata":"Q20138","text":"Roxbury Crossing"},{"id":"region.6776276020561540","short_code":"US-MA","wikidata":"Q771","text":"Massachusetts"},{"id":"country.9053006287256050","short_code":"us","wikidata":"Q30","text":"United States"}]},{"id":"address.4057524105398816","type":"Feature","place_type":["address"],"relevance":1,"properties":{"accuracy":"rooftop"},"text":"Greenwich Park","place_name":"17 Greenwich Park, Boston, Massachusetts 02118, United States","center":[-71.080331,42.342747],"geometry":{"type":"Point","coordinates":[-71.080331,42.342747]},"address":"17","context":[{"id":"neighborhood.294804","text":"Back Bay"},{"id":"postcode.8640649655199430","text":"02118"},{"id":"place.9391334652012190","wikidata":"Q100","text":"Boston"},{"id":"region.6776276020561540","short_code":"US-MA","wikidata":"Q771","text":"Massachusetts"},{"id":"country.9053006287256050","short_code":"us","wikidata":"Q30","text":"United States"}]}],"attribution":"NOTICE: © 2019 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained. POI(s) provided by Foursquare."}
JSON输出包含一个FeatureCollection。在要素数组中,每个要素都有一个属性“place_name”,它给出列出的任何地点的完整地址。这就是我想要访问的内容

每当我将此JSON读入android应用程序并尝试将其转换为FeatureCollection时,我发现“place_name”属性不是com.mapbox.geojson.Feature的一部分。我使用以下方法将JSON转换为FeatureCollection:

FeatureCollection.fromJson(response);
Feature feature = new Feature().fromJson(response);

feature.addStringProperty("place_name", "17 Green Street, Brookline, Massachusetts 02446, United States");

FeatureCollection.fromFeature(feature);


其中response是返回的JSON,如上所示。我的问题是:如果MapBox没有将该属性作为com.MapBox.geojson.Feature的一部分包含,我如何访问该属性?是否有Mapbox中包含的其他类我应该使用?

您可以在创建集合之前将该属性添加到功能中:

FeatureCollection.fromJson(response);
Feature feature = new Feature().fromJson(response);

feature.addStringProperty("place_name", "17 Green Street, Brookline, Massachusetts 02446, United States");

FeatureCollection.fromFeature(feature);

然后,对于查询:

feature.getProperties()
获取与该功能关联的所有属性,或
feature.getStringProperty(“地名”)
获取特定属性


看看这些功能

但这涉及到分离JSON以访问特定属性。似乎类似的功能应该已经存在,因为属性是功能的重要组成部分。与此相关,我能想到的最好方法是编写一个自定义json解析器,以深入到功能级别,并使用addStringProperty添加每个属性。这确实与我在项目中实际做的类似,一个自定义json解析器,用于序列化/反序列化为功能或geojson。遗憾的是,没有方便的方法来完成所有这些。