通过for循环添加时,标记无法正确添加

时间:2014-04-27 05:54:37

标签: android maps google-maps-markers

  1. 标记未正确添加for循环
  2. 当我给i = 2然后它正在加载第二个标记,否则它只是加载单个标记
  3. 你能告诉我可能是什么原因
  4. JSONObject jsonObject = new JSONObject(result);
    
                for (int i = 1; i <= jsonObject.length(); i++) {
                    jsonObject = jsonObject.getJSONObject(Integer.toString(i));
    
                    Double lat = jsonObject.getDouble("latitude");
    
                    Double lon = jsonObject.getDouble("longitude");
    
                    int sno = jsonObject.getInt("sno");
    
                    Toast.makeText(getBaseContext(), "" + lat + lon + sno,
                            Toast.LENGTH_SHORT).show();
    
                    MarkerOptions marker = new MarkerOptions()
                            .position(new LatLng(lat, lon)).title("New")
                            .snippet("are here");
    
                    googleMap.addMarker(marker);
    
                }
    

1 个答案:

答案 0 :(得分:3)

问题是您在尝试获取内部JSONObject时使用相同的JSONObject变量。因此,在第一个for循环之后,第二个将尝试从内部JSONObject获取JSONObject,而不是从父JSONObject获取。{/ p>

为此内部JSONObject声明一个新变量

JSONObject jsonObject = new JSONObject(result);
for (int i = 1; i <= jsonObject.length(); i++) {
   JSONObject jsonInnerObject = jsonObject.getJSONObject(Integer.toString(i));
   Double lat = jsonInnerObject.getDouble("latitude");
   Double lon = jsonInnerObject.getDouble("longitude");
   // Add your other stuff here
}

另一种最佳方法是使用密钥进行迭代。这并不需要索引。您可以使用任何值代替索引。

JSONObject jsonObject = new JSONObject(json);
Iterator<Object> iterator = jsonObject.keys();

while (iterator.hasNext()){
 Object obj = iterator.next();
 JSONObject innerJsonObject = jsonObject.getJSONObject(obj.toString());
 if(innerJsonObject != null) {
 Double lat = innerJsonObject.getDouble("latitude");
 Double lon = innerJsonObject.getDouble("longitude");
   // do your other stuff here to add to marker
  }
 }