我正在从服务器获取JSONArray
。我得到的JSON
具有以下格式。
[ {
"area_name":"abc",
"coordinates":[
{
"lat":1.123,
"lng":2.123,
},
{
"lat":1.123,
"lng":2.123,
},
.
.
]
},
{
.
.
.
}
]
为了在地图上绘制区域,我将区域添加到
areaList
及其在coordinatesList
中的相应坐标ArrayList<HashMap<String, LatLng>> coordinatesList; // initialised in onCreate
List<ArrayList<HashMap<String, LatLng>>> areaList; // initialised in onCreate
for (int i = 0; i < areaArray.size(); i++) {
coordinatesList.clear();
//coordinatesList = new ArrayList<>();
// parsing of json and other non-related stuff
for (int j =0; j < pointsArray.size(); j++) {
// Getting data from json and saving to hashmap and adding to coordinatesList
coordinatesList.add(pointsHashMap);
}
areaList.add(coordinatesList);
}
现在,如果我尝试从某个功能的
areaList
获取值。我对所有位置都得到相同的值。log.d(TAG, "area " + areaList.get(i).get(0).get("lat_lng)); // its in a loop
对于
i
的任何值,我将得到areaList.add(coordinatesList);
的最后一个附加值。 areaList
中所有先前添加的值将被替换。但是,当我评论
coordinatesList.clear();
和取消评论coordinatesList = new ArrayList<>();
时,一切都会按预期进行。有人可以详细说明一下,为什么会这样吗?
最佳答案
您肯定需要在循环中的每次迭代中向areaList添加一个新的ArrayList。现在,您每次通过循环都将相同的ordinatesList实例添加到areaList。同一实例在列表顶部被清除。
将相同的坐标列表添加到areaList不会复制元素,而只是将引用添加到现有列表。