我正在从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")
}
}
}
这两个日志都返回空列表