从Assets文件夹中的JSON文件创建带有lat和long的Marker

时间:2016-05-25 08:40:32

标签: android

我创建了一个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();
            }


        }

2 个答案:

答案 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");