如何用doAsync替换AsyncTask

时间:2018-08-29 13:53:16

标签: android kotlin anko

我正在从firestore中检索所有文档,并将其存储在ArrayList中,每个元素都是自定义dataType。数据检索过程需要一些时间,因此我想在检索数据后制作listView。我以前使用过AsyncTask,也曾经使用过onPostExectue函数,但是我开始了解Kotlin中的doAsync,并想尝试一下。

有人可以指导我怎么做吗?

这是获取数据的功能

    fun initFirestore(): ArrayList<MetaData>{
        FirebaseApp.initializeApp(this@MainActivity)
        val db = FirebaseFirestore.getInstance()
        val returnData: ArrayList<MetaData> = ArrayList()
        db.collection("name_of_collection")
                .orderBy("id")
                .get()
                .addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        for (document in task.result) {
                            val data = document.data
                            returnData.add(MetaData(data["name"].toString(), data["artist"].toString(), data["url"].toString()))
//                            Log.d("Test", document.id + " => " + data)
                        }
                    } else {
//                        Log.d("Test", "Error getting documents: ", task.exception)
                    }
                }
        return returnData
    }

日志显示正确的数据。我从另一个函数中调用它

fun getSongs(){
        doAsync {
            val test = initFirestore()

            onComplete {
                Log.v("Test","$test")
            }

            uiThread {
                Log.v("A","$test")
            }
        }
    }

这两个日志都返回空列表

0 个答案:

没有答案