【发布时间】:2020-05-05 07:37:27
【问题描述】:
我从 Firestone 获取数据,因为不想返回空列表,所以我使用回调 协程更好吗,我有很多这样的,所以在这种情况下回调很吵,async/await 会是一个很好的解决方案
getHerosFromCloud(object :OnFinishedCallbacks {
override fun onFinshed(list: List<Any>) {
CoroutineScope(Dispatchers.IO).launch {
MainDatabase.heroDao.insertAll(*(list as List<Hero>).toTypedArray())
}
}
})
interface OnFinishedCallbacks {
fun onFinshed( list:List<Any>)
}
fun getHerosFromCloud(onFinishedCallbacks: OnFinishedCallbacks)
{
val heroList =ArrayList<Hero>()
db.collection("Heros")
.get()
.addOnSuccessListener { documentSnapshot ->
if (documentSnapshot != null) {
for(heroDoc in documentSnapshot) {
heroList.add(heroDoc.toObject(Hero::class.java))
}
Log.d("newherosNames", "newdoorsNames data: ${heroList}")
onFinishedCallbacks.onFinshed(heroList)
} else {
Log.d("heros", "No such document")
}
}
.addOnFailureListener { exception ->
Log.d("heros", "get failed with ", exception)
}
}
【问题讨论】:
标签: android kotlin google-cloud-firestore kotlin-coroutines coroutinescope