【问题标题】:Why doesn't my code executed from top to bottom in kotlin?为什么我的代码没有在 kotlin 中从上到下执行?
【发布时间】:2020-02-04 10:15:38
【问题描述】:

我正在制作一个回收站视图。使用 init 块 时,我遇到了问题。 我期望代码按顺序执行。但它不正常

一些代码:

inner class TodoListFragmentRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
        val doListDTOs =  ArrayList<DoListDTO>()

        init {
            Log.e("1","1")
            doListListenerRegistration = fireStore.collection("doList").whereEqualTo("doListName",todoList_name).orderBy("doListTimestamp", Query.Direction.DESCENDING).limit(100)
                .addSnapshotListener { querySnapshot, firebaseFirestoreException ->
                    if (querySnapshot == null) return@addSnapshotListener
                    doListDTOs.clear()
                    for (snapshot in querySnapshot.documents) {
                        val item = snapshot.toObject(DoListDTO::class.java)
                        doListDTOs.add(item!!)
                        Log.e("2",doListDTOs.toString())
                        notifyDataSetChanged()
                    }
                }
            Log.e("3",doListDTOs.toString())
        }
}

我希望日志显示如下顺序 1 -&gt; 2 -&gt; 3 但是,实际输出是 1 -&gt; 3 -&gt; 2

这是为什么?

作为一个附加问题,由于上述顺序,日志 3 中的最后一个 doListDTOs.toString() 为空。但日志 2 中的 doListDTOs.toString 有一些价值。 如果不是订单问题,如果您能告诉我是什么问题,我将不胜感激。

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    当您连接到 Firestore 并尝试从 Firestore 数据库请求数据时。您实际上是在进行通过后台线程运行的网络调用。 现在主线程首先为您打印日志为 1。然后启动一个新线程 A(例如)。最后打印 3。 但是您必须注意,当通过线程 A 读取数据并返回到主线程(IPC)的回调时,将打印 2,这正是它在 2 之前显示 3 的原因。

    如果您需要在两个之后运行 3,您可以在 firestore 回调中编写代码。完成该任务后,您将开始下一步。

    希望对你有帮助!

    【讨论】:

    • 谢谢!我通过以下方式解决了“Task combineTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener>() { @Override public void onSuccess(List list) { //这是列表我想要的 } });"请参阅下面的链接stackoverflow.com/questions/51859652/…祝您有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多