Запустите функцию полностью перед переходом к следующему действию - PullRequest
2 голосов
/ 01 апреля 2019

Я хочу нажать кнопку, которая будет извлекать некоторые данные из Firebase, затем я хочу перейти к следующему действию, передав массив, содержащий данные Firebase. Я все еще не могу обернуть голову вокруг асинхронного кода, и я надеялся, что кто-нибудь сможет помочь мне с самым простым способом сделать это.

Я экспериментировал с блокировкой выполнения, функциями приостановки, ожиданием и асинхронностью, но я не могу понять, что это правильно. Вот мой слушатель по щелчку:

btn_games_quiz.setOnClickListener {

    listenForQuestions()

    val intent = Intent(this, QuizActivity::class.java)
    intent.putExtra("questionArray", questionArray)
    startActivity(intent)

}

А вот послушайте вопросы:

private fun listenForQuestions(){

    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("MM")
    val formatted = current.format(formatter)
    val currentMonth = QuizActivity.months[formatted.toInt()]

    val ref = FirebaseDatabase.getInstance().getReference("/quizzes/$currentMonth")

    ref.addChildEventListener(object: ChildEventListener {

        override fun onChildAdded(p0: DataSnapshot, p1: String?) {
                val questionItem = p0.getValue(Question::class.java)

                if (questionItem != null) {
                    questionArray += questionItem
                }
        }

        override fun onCancelled(p0: DatabaseError) {
        }

        override fun onChildChanged(p0: DataSnapshot, p1: String?) {
        }

        override fun onChildMoved(p0: DataSnapshot, p1: String?) {
        }

        override fun onChildRemoved(p0: DataSnapshot) {
        }
    })

}

Точка в правильном направлении будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Я бы предложил запустить это в сопрограмме.

Для асинхронного программирования с использованием сопрограмм, пожалуйста, просмотрите эту ссылку.https://kotlinlang.org/docs/reference/coroutines-overview.html

0 голосов
/ 02 апреля 2019

попробуйте использовать поток.новый Runnable ();

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