firebase - 回到协程内的主线程?

标签 firebase kotlin firebase-realtime-database firebase-authentication kotlin-coroutines

我正在运行此代码,因为 addListenerForSingleEvent 是一个长时间运行的操作:

CoroutineScope(IO).launch {  
    userRef.addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                withContext(Main) {
                    toggleLoading()
                    val intent = Intent(this@LogInActivity, MainActivity::class.java)
                    startActivity(intent)
                    finish()
                }
            } else{
                withContext(Main) {
                    var addUsernameIntent = Intent(this@LogInActivity, 
                                             AddUsernameActivity::class.java)
                    startActivityForResult(addUsernameIntent, CHOOSE_USERNAME_REQUEST)
                }
            }
        }
   })
}   

我在编写 withContext(Main) 时遇到错误:

Suspension functions can be called only within coroutine body

但是我有一个协程体,对吗?在我只有一个 Thread(runnable {..}) 而不是协程之前,但我读到我不应该在除主线程之外的任何其他线程中执行意图,所以我改为协程。

最佳答案

Firebase 客户端已经在单独的线程上运行任何网络和磁盘 I/O 操作。几乎不需要自己在单独的线程上运行 addListenerForSingleEvent

另见:

关于firebase - 回到协程内的主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60786749/

相关文章:

android - Firebase 实时数据库规则自行重置

javascript - 组合 JSON 数据集

java - 如何从当前登录用户 Firebase 获取数据

android - 如何从共享首选项 (Android) 中禁用 bool 值的 Firebase 消息传递

swift - 将 Firebase 身份验证与 Firebase 数据库连接

android - 将 pagingData 3 流与另一个流相结合

android - 如何在 Kotlin 中为 RecyclerView 添加项目分隔符

firebase - 添加 firebase 依赖后 Flutter 'Packages get' 失败

database - 在 Firebase Firestore 中映射集合快照的项目

kotlin - 如何通过改造阻塞客户端和协程实现有限调用