Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何用doAsync替换AsyncTask_Android_Kotlin_Anko - Fatal编程技术网

Android 如何用doAsync替换AsyncTask

Android 如何用doAsync替换AsyncTask,android,kotlin,anko,Android,Kotlin,Anko,我正在从firestore检索所有文档,并将其存储在ArrayList中,每个元素都是一个自定义数据类型。数据检索过程需要一点时间,因此我希望在检索数据后生成listView。我以前使用过AsyncTask,也会使用OnPostExecutue函数,但我了解了kotlin中的doAsync,并想尝试一下 有人能指导我怎么做吗 这是获取数据的函数 fun initFirestore(): ArrayList<MetaData>{ FirebaseApp.init

我正在从firestore检索所有文档,并将其存储在ArrayList中,每个元素都是一个自定义数据类型。数据检索过程需要一点时间,因此我希望在检索数据后生成listView。我以前使用过AsyncTask,也会使用OnPostExecutue函数,但我了解了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
    }

这里的两个日志都返回空列表

如果您继续这样做,那么在Kotlin 1.3发布后,您可能最好暂停函数。我添加了代码以提供更好的想法。在kotlin 1.3发布之前,我是否必须使用AsyncTask来实现这一点?
fun getSongs(){
        doAsync {
            val test = initFirestore()

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

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