Я получаю значения долготы и широты каждого пользователя из firebase, но проблема в том, что я хочу добавить эти значения каждого пользователя в один список, чтобы было много списков, поэтому я использую arraylist из arraylist.
Итак, для первого пользователя
долгота = 12345, широта = 23456
И для 2-го пользователя
долгота = 45678, широта = 67891.
Теперь мой вопрос: я хочу добавить долготу и широту первого пользователя в список [12345, 23456] и для второго пользователя [45678, 67891] При использовании arraylist из arraylist равно [[ 12345,23456],[45678, 67891]].
Мой код: -
Инициализация: -
ArrayList<String> longitudes = new ArrayList<>();//for storing latitude and longitude values
ArrayList<ArrayList<String> > aList =
new ArrayList<ArrayList<String> >();
//for storing combine values of longitude and latitude
databaseReference.child("hospital").addValueEventListener(new ValueEventListener() {
@SuppressLint("SetTextI18n")
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
longitudes.clear();
for (DataSnapshot snapshot1: snapshot.getChildren()) {
longitudes.add(snapshot1.child("longitude").getValue().toString());
longitudes.add(snapshot1.child("latitude").getValue().toString());
aList.add(count,longitudes);
count++;
}
count=0;
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Но он выдает результат как
[[12345,23456,45678, 67891],[12345,23456,45678, 67891]] Он повторяет значения
Но я ожидаю для каждого пользователя, как
[[12345,23456],[45678, 67891]]
Именно там, где мне нужно создать и добавить значения
Реализация в основном неверна, так как я вижу, что вы пытаетесь добавить в массив долгот также и широту.
public void onDataChange(@NonNull DataSnapshot snapshot) {
longitudes.clear();
for (DataSnapshot snapshot1: snapshot.getChildren()) {
Map<String, String> map = new HashMap();
map.put('longitude',snapshot1.child("longitude").getValue().toString());
map.put('latitude',snapshot1.child("latitude").getValue().toString());
aList.add(count,map);
count++;
}
count=0;
}
OP пытается представить широту и долготу, используя список с двумя записями. Карта здесь не очень хорошая замена. Также ваш код не компилируется, потому что строковые литералы в java используют двойные кавычки.
Я пробовал с этим кодом. он работает, но он дает longi и lat как строку со значениями
Вы можете сделать общие карты как Double или Integer в соответствии с вашими требованиями и можете хранить тип данных. Например, Map<String, Double> map = new HashMap();
Ваш longitudes всегда один и тот же список. Создайте новый ArrayList и назначьте его longitudes на каждой итерации цикла вместо очистки и повторного использования существующего.
Удалите существующую переменную longitudes и сделайте так, чтобы ваш цикл выглядел так:
ArrayList<String> longitudes;
for (DataSnapshot snapshot1: snapshot.getChildren()) {
longitudes = new ArrayList<>()
longitudes.add(snapshot1.child("longitude").getValue().toString());
longitudes.add(snapshot1.child("latitude").getValue().toString());
aList.add(count,longitudes);
count++;
}
Я также хотел бы предложить не представлять lat + long в виде списка с 2 элементами, просто создайте свой собственный класс с 2 полями или, если вы находитесь на java14+, используйте запись:
public record LatLong (String lat, String long) {}
А затем используйте это в своем списке:
ArrayList<LatLong > aList = new ArrayList<>();
Отлично .. работает . но в моем коде я также очищаю список. тогда почему он сохраняет эти предыдущие значения
Вы очищаете его только один раз перед циклом. Затем вы дважды проходите цикл, добавляя значения в один и тот же общий список (и дважды добавляете этот список во внешний список).
Ваш longitudes всегда один и тот же список. Создайте новый ArrayList и назначьте его longitudes на каждой итерации цикла вместо очистки и повторного использования существующего.