Kotlin使用协程从Firestore获取数据

时间:2020-08-29 14:09:43

标签: kotlin google-cloud-firestore coroutine

我从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

有什么主意吗?

感谢您的帮助!

0 个答案:

没有答案