我创建了一个Android应用程序,并希望将标记添加到我的地图中,使用lat和long来自Assets文件夹中的JSON文件。我不知道我的代码中的错误是什么,我的标记没有显示出来。
这是我的Json文件:
{
"data" : [
{
"title": "Loja Coqueiros",
"lat": -8.8123083,
"lng": 13.2249500
},
{
"title": "Loja Amilca Cabral",
"lat": -8.8265861,
"lng": 13.2274667
},
{
"title": "Loja samba",
"lat":-8.8328611,
"lng": 13.2182861
}
]
}
这是我获取JSON文件的方式:
public String getJSONFromAssets() {
String json = null;
try {
InputStream inputData = getAssets().open("locations.json");
int size = inputData.available();
byte[] buffer = new byte[size];
inputData.read(buffer);
inputData.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
我已添加到我的数组:
JSONObject obj = new JSONObject(getJSONFromAssets());
JSONArray arr = obj.getJSONArray("data");
if (arr != null)
for (int i=0;i<arr.length();i++)
locations.add(arr.get(i).toString());
我创建了我的标记:
for (int i=0;i< locations.size();i++) {
try {
map.addMarker(new MarkerOptions()
.position(new LatLng(obj.getJSONArray("lat").getDouble(0),
obj.getJSONArray("lng").getDouble(0)))
.title((obj.getString("title")))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_marker)));
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
正如用户dolphinziyo所说的问题是在obj.getJSONArray(“lat”)。getDouble(0)中,你是以错误的方式访问它。
请用以下for循环替换你的for循环:
for (int i=0;i< locations.size();i++) {
JSONObject locationObj = new JSONObject(locations.get(i));
try {
map.addMarker(new MarkerOptions()
.position(new LatLng(locationObj.getDouble("lat"),
locationObj.getDouble("lan"))
.title((locationObj.getString("title")))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_map_marker)));
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
问题出在obj.getJSONArray("lat").getDouble(0)
,您是以错误的方式访问它。从locations
获取并将其解析为double,或者如果您想从json获取它,则必须使用arr
:
arr.getJSONObject(0).getDouble("lat");
如果你只想从完整的JSON中做到正确,你必须这样做:
obj.getJSONArray("data").getJSONObject(0).getDouble("lat");