使用 Google map api 在 android Studio 中解析 Json
Posted
技术标签:
【中文标题】使用 Google map api 在 android Studio 中解析 Json【英文标题】:Parsing Json in android Studio with Google map api 【发布时间】:2020-10-07 08:18:44 【问题描述】:我对 android 开发非常陌生。我正在尝试将“坐标”解析为标记,将“名称线”解析为来自以下 JSON sn-p 的相应坐标的标题:
[
"osm_id": "45737878",
"jsongeoms": [
"longitude": 4.379361,
"latitude": 45.4325822004212
,
"longitude": 4.3798922,
"latitude": 45.43297760042115
,
"longitude": 4.3799371,
"latitude": 45.43302460042115
,
"longitude": 4.3800508,
"latitude": 45.433070900421136
],
"way": "0102000020E610000004000000ED82C1357784114005D281DA5EB746409F05FC7502851140CDDA5CCF6BB74640F9252C3B0E8511400E96A0596DB74640494673092C8511403B1405DE6EB74640",
"highway": "residential",
**"nameline"**: "Rue Vaucanson",
"maxspeed": null
,
"osm_id": "272992421",
"jsongeoms": [
"longitude": 4.3803678,
"latitude": 45.432611700421205
,
"longitude": 4.380298399999999,
"latitude": 45.43271530042118
,
"longitude": 4.3800861,
"latitude": 45.43302760042115
,
"longitude": 4.3800508,
"latitude": 45.433070900421136
,
"longitude": 4.3799992,
"latitude": 45.43315010042112
,
"longitude": 4.3796751,
"latitude": 45.433588600421075
,
"longitude": 4.3796212,
"latitude": 45.43364890042106
], "way": "0102000020E6100000070000004ECEF5227F8511408896F8D15FB746406EE29AF16C851140D6E4073763B7464020A8644A358511407F09CB726DB74640494673092C8511403B1405DE6EB746405006A2821E851140AFC8657671B74640106CA68CC98411400C5DCDD47FB746401D797B6BBB8411409EA0A2CE81B74640",
"highway": "secondary",
**"nameline"**: "Boulevard Martin Bernard",
"maxspeed": null
,
...
]
但我的输出并不令人满意。
请在下面查看我的代码并告诉我哪里出错了:
JsonArrayRequest request= new JsonArrayRequest(Request.Method.GET,url,null, new Response.Listener<JSONArray>()
@Override
public void onResponse(JSONArray response)
for (int i = 0; i < response.length(); i++)
try
JSONObject jsonObject = response.getJSONObject(i);
JSONArray jsonArray = jsonObject.getJSONArray("jsongeoms");
for (int j = 0; j < jsonArray.length(); j++)
JSONObject jsongeoms = jsonArray.getJSONObject(i);
double longitude = jsongeoms.getDouble("longitude");
double latitude = jsongeoms.getDouble("latitude");
LatLng sainte = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sainte).title("Service Result"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sainte));
mMap.getMaxZoomLevel();
/* Enter code here */
【问题讨论】:
您在此处粘贴的不是有效的 json。 “我的输出不令人满意”是什么意思?您希望获得什么数据以及目前获得什么数据? 它只是因为 ArrayIndexOutOfBound 而崩溃吗?请记住,.length() 会告诉您数组中有多少项,但在 java 中,第一个元素从位置 0 开始计数,您希望循环直到: i 应用程序没有崩溃。我没有得到所有的坐标。从“jsongeoms”的第一个数组中,我需要所有坐标,但我只得到 1 个坐标。 【参考方案1】:JsonArrayRequest request= new JsonArrayRequest(Request.Method.GET,url,null,
new Response.Listener<JSONArray>()
@Override
public void onResponse(JSONArray response)
for (int i= 0;i< response.length();i++)
try
JSONObject jsonObject = response.getJSONObject(i);
String naming= jsonObject.getString("nameline");
String highway= jsonObject.getString("highway");
String speed = jsonObject.getString("maxspeed");
String way = jsonObject.getString("way");
JSONArray jsonArray = jsonObject.getJSONArray("jsongeoms");
for (int j = 0; j < jsonArray.length(); j++)
JSONObject jsongeoms = jsonArray.getJSONObject(j);
double longitude = jsongeoms.getDouble("longitude");
double latitude = jsongeoms.getDouble("latitude");
LatLng sainte = new LatLng(latitude,longitude);
mMap.addMarker(new MarkerOptions().position(sainte).title(naming)
.snippet(highway.concat(speed).concat(way))
.icon(bitmapDescriptorFromVector(getApplicationContext(),R.drawable.ic_play_arrow_black_24dp)));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sainte));
mMap.getMaxZoomLevel();
catch (JSONException e)
e.printStackTrace();
,
【讨论】:
以上是关于使用 Google map api 在 android Studio 中解析 Json的主要内容,如果未能解决你的问题,请参考以下文章
在 maps.google.com 上的缩放比在 Google Maps API v3 上更流畅
在 Jest 测试之前无法加载 Google Maps API