Я получаю JSONArray
с сервера. JSON
Я получаю следующий формат.ArrayList.clear() обновляет предыдущие значения списка <>
[ {
"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<>();
все работает должным образом.
Может кто-то прокомментировать это, почему это происходит так?
Добавление элемента в список массива не копирует его. Вы добавляете один и тот же список снова и снова. Просто объявите CoordList внутри цикла; создайте новую на каждой итерации. –
ну, ах, это было довольно глупо от меня. Я думаю, что вся целая ночь за дело. –