转到下一个活动之前,请完整运行一个功能

时间:2019-04-01 20:51:50

标签: android android-intent kotlin

我想单击一个按钮,该按钮将从Firebase中提取一些数据,然后我要转到下一个活动,传递包含Firebase数据的数组。我仍然不能全神贯注于异步代码,我希望有人可以以最简单的方式帮助我实现这一目标。

我已经尝试过运行阻塞,暂停功能,等待和异步,但是我似乎无法正确地做到这一点。这是我的点击监听器:

btn_games_quiz.setOnClickListener {

    listenForQuestions()

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

}

这是listenForQuestions:

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 :(得分:0)

尝试使用线程。 新的Runnable();

答案 1 :(得分:0)

我建议在协程中运行它。

对于使用协程的异步编程,请查看此链接。 https://kotlinlang.org/docs/reference/coroutines-overview.html