Как дождаться получения списка данных в Firestore? - PullRequest
0 голосов
/ 05 мая 2020

У меня два основных класса: Карты и Коллекции. В коллекции есть список строк, которые представляют собой идентификаторы карт внутри нее. Поэтому мне нужно получить всю информацию о картах внутри коллекции, а затем выполнить проверку по почте (для целей приложения).

Я создаю список карт внутри моего фрагмента и получаю вся информация из Firestore. Проблема в том, что я не получаю все карты от db. Я пробовал использовать MVVM и метод интерфейса (отсюда Подождите, пока данные Firestore будут извлечены для запуска действия ), но обычно я получаю 4, 6 карточек из коллекции с 10 карточками.

Как можно дождаться получения всех элементов из списка?

Мой код с реализацией интерфейса:

private void getGeneratorInfo()
    DocumentReference collectionDoc = Common.collectionsCol.document(collectionId);
    collectionDoc.get().addOnSuccessListener(documentSnapshot12 -> {
        Collections collections = documentSnapshot12.toObject(Collections.class);
        getCardList(collections.getCardsIdList(), returnCardList -> {
            checkDifficulty(returnCardList);
        });
    }).addOnFailureListener(e -> Toast.makeText(getContext(), "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show());
}

private void getCardList(List<String> cardsIdList, IGetCardList iGetCardList) {
    List<Cards> newCardList = new ArrayList<>();
    for (int i = 0; i < cardsIdList.size(); i++) {
        DocumentReference cardDoc = Common.cardsCol.document(cardsIdList.get(i));
        if (i == cardsIdList.size() - 1) {
            cardDoc.get().addOnSuccessListener(documentSnapshot -> {
                newCardList.add(documentSnapshot.toObject(Cards.class));
                iGetCardList.returnCardList(newCardList);
            }).addOnFailureListener(e -> Toast.makeText(getContext(), "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show());
        } else {
            cardDoc.get().addOnSuccessListener(documentSnapshot -> newCardList.add(documentSnapshot.toObject(Cards.class)))
                    .addOnFailureListener(e -> Toast.makeText(getContext(), "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show());
        }
    }
}

Мой интерфейс:

public interface IGetCardList {
    void returnCardList(List<Cards> returnCardList);
}

(Это в строке checkDifficulty(returnCardList), которая при отладке показывает, что returnCardList имеет 4 ~ 6 элементов)

...