Я извлекаю все документы из хранилища и сохраняю их в ArrayList с каждым элементом, являющимся пользовательским типом данных. Процесс извлечения данных занимает немного времени, и поэтому я хочу сделать listView после того, как данные были извлечены. Я уже использовал AsyncTask и использовал бы функцию onPostExectue, но я узнал о doAsync в kotlin и хотел попробовать его.
Может кто-нибудь подсказать мне, как это сделать?
Это функция для получения данных
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")
}
}
}
Оба журнала здесь возвращают пустой список