android - 如何使用 Kotlin Flow 从异步回调中发出数据?

标签 android kotlin kotlin-coroutines

我开始学习 Kotlin Flow 和 Coroutines,但我不知道如何使下面的代码工作。我究竟做错了什么?

interface MessagesListener {
    fun onNewMessageReceived(message: String)
}

fun messages(): Flow<String> = flow {

    val messagesListener = object : MessagesListener {
        override fun onNewMessageReceived(message: String) {

            // The line below generates the error 'Suspension functions can be called only within coroutine body'

            emit(message)
        }
    }

    val messagesPublisher = MessagesPublisher(messagesListener)
    messagesPublisher.connect()
}

最佳答案

我相信你应该可以使用callbackFlow ....就像是:

fun messages(): Flow<String> = callbackFlow {

    val messagesListener = object : MessagesListener {
        override fun onNewMessageReceived(message: String) {
            trySend(message)
        }
    }

    val messagesPublisher = MessagesPublisher(messagesListener)
    messagesPublisher.connect()
}

关于android - 如何使用 Kotlin Flow 从异步回调中发出数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64623712/

相关文章:

java - RxJava 全局处理程序和 Android Vitals

android - 如何使用 MOSHI 将 un json 字符串解析为列表

kotlin - 在行首使用数学运算符

multithreading - 如何限制 kotlin 协程的最大并发性

Android - 使用改造和协程获取响应状态代码

android - 约束布局奇怪的行为

Android 文件选择器不从 Android Webview 调用

android - 如何在 Android CameraX 中使用手动对焦?

multithreading - Kotlin:如何调用可挂起函数而不等待其结果?

java - Android:使默认全息按钮不透明