Установка глобальной переменной с Cloud Firestore на Kotlin - PullRequest
0 голосов
/ 09 апреля 2020

снова :) У меня вопрос о Cloud Firestore и Kotlin.

Мне нужно получить данные из firestore с помощью следующего кода:

    {
    val comments = mutableListOf<Comment>()

    val firestore = FirebaseFirestore.getInstance()
    firestore.collection(collection).document(documentID).collection("comments")
        .addSnapshotListener { querySnapshot, firebaseFirestoreException ->
            comments = querySnapshot?.toObjects(Comment::class.java)!!

            // do something with 'comments'. Works: comments is populated

        }

    // do something with variable 'comments'. Doesn't work: comments is now empty
}

Комментарий к переменной 'заполняется в фигурных скобках слушателя, но когда слушатель заканчивается, значение возвращается к 0.

Я исследовал в Интернете и нашел примеры в JAVA, которые прекрасно работают таким образом, например: https://youtu.be/691K6NPp2Y8?t=246

Моя цель - получить данные только ОДИН РАЗ из хранилища облачных файлов и сохранить это значение в глобальной переменной, комментарии.

Пожалуйста, дайте мне знать, если у вас есть решение для этого.

Спасибо.

1 Ответ

0 голосов
/ 09 апреля 2020

Значение не «go обратно в ноль». Вы должны понимать, что запрос к базе данных является асинхронным, и addSnapshotListener возвращается немедленно, прежде чем запрос завершится. Окончательное значение известно только тогда, когда слушатель вызывается через некоторое время.

Кроме того, вы должны знать, что если вы просто хотите запросить один раз, вы должны использовать get() вместо addSnapshotListener(). Он также является асинхронным и возвращается немедленно, а возвращаемая Задача будет вызвана через некоторое время. Нет синхронных опций, которые блокируют звонящего до тех пор, пока запрос не будет завершен - вам нужно будет научиться выполнять свою работу асинхронно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...