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