我得到JSONArray
来自服务器。 JSON
我得到的格式如下。
[ {
"area_name":"abc",
"coordinates":[
{
"lat":1.123,
"lng":2.123,
},
{
"lat":1.123,
"lng":2.123,
},
.
.
]
},
{
.
.
.
}
]
为了在 map 上绘制区域,我将区域添加到 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<>();
一切都按预期进行。
有人可以详细说明一下吗,为什么会发生这样的情况?
最佳答案
因为每次你在循环中不满足数组列表时,都会尝试在 onCreate(); 中不满足数组列表
coordinatesList = new ArrayList<>();
关于java - ArrayList.clear() 正在更新 List<> 的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595783/