我从Firestore获取数据时非常失落,网上有100万个解决方案(使用协程,Flow,try&catch,onCallback,runBlocking,.await(),改造,ViewModel,RecycleView等)。 ),但最后却没有一种简单的方法...
从我这边来说,我只想从至少2个Firestore文档中下载和存储信息,然后再进行其他活动。当我必须从一个文档中获取数据时,它工作正常(我将startActivity放在docref.get()。addOnCompleteListener / if(task.isSuccessful)/ docRef.get()。addOnSuccessListener循环中)但是我必须下载来自多个docref的数据,我尝试在主循环中使用外部函数,然后遇到异步问题。
经过多次尝试后,我正在测试Alex在底部描述的here。因此,我在协程中启动了“ get_data”:
GlobalScope.coroutinesLaunch {getDataFromFirestore() }
我写了相关的函数:
private suspend fun getDataFromFirestore() {
try {
val myval1: MyClass1 = getDataFromDoc1()
(this.application as MyApp).mydata1 = myval1
val myval2: MyClass2 = getDataFromDoc2()
(this.application as MyApp).mydata2 = myval2
}
catch (e: Exception) {
Toast.makeText(this,"Fail",Toast.LENGTH_LONG).show()
}
}
和文档1中的mydata1(与其他文档中的其他数据相同)
private suspend fun getData1(): MyClass1 {
val db = FirebaseFirestore.getInstance()
val docRef = db.collection("collection_key").document("document1_key")
val documentSnapshot = docRef.get().await()
return documentSnapshot.toObject()!!
}
问题是我的数据“ myval1”的值在“ try”之后是正确的,但“消失了”:我无法成功将其捕获到“ global”变量中(this.application为MyApp) .mydata1
有什么主意吗?
感谢您的帮助!