я создал два метода для получения данных из firestore. Первый метод перебирает список атрибутов, выбранных пользователем. Другой метод — запрос данных в зависимости от выбора пользователя. После повторения каждого элемента необходимо запустить новый метод. Проблема в том, что мой список всегда пуст, хотя данные есть. Вот оба метода:
private void getStores(ArrayList<String> checkedItems) {
newSeller = new ArrayList<>();
sellers = new ArrayList<>();
a = 0;
for (int i =0; i<checkedItems.size(); i++){
String checkedItem = checkedItems.get(i);
int finalA = i;
getStore(checkedItem);
}
}
private void getStore(String checkedItem) {
db.collection("Seller")
.whereEqualTo("typ", checkedItem)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
SellerObject so = document.toObject(SellerObject.class);
so.setId(document.getId());
sellers.add(so);
Log.i(TAG, "onComplete: toa"+sellers.size());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
теперь он работает, но дело в том, что после моего первого цикла размер списка только каждый второй раз правильный. я не знаю почему
Вы объявляете массив «sellers» внутри первой функции, но затем пытаетесь добавить к нему вторую функцию. Уберите продавцов из функции, чтобы к ней можно было добраться.
но я должен очистить массив, прежде чем я снова проанализирую данные. Я также пробовал это с продавцами.clear, но это тоже не работает. Если я удалю этот оператор, у меня будут избыточные значения
у меня сейчас другая проблема. Не могли бы вы помочь мне?
Ваш код выглядит нормально, дважды проверьте структуру базы данных Firestore, чтобы убедиться, что вы правильно запрашиваете (также добавьте структуру в свой пост, если вам нужна помощь)