首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scarlet @Receive从不被触发

Scarlet @Receive从不被触发
EN

Stack Overflow用户
提问于 2020-10-19 00:17:47
回答 1查看 211关注 0票数 0

我已经在我的应用程序中集成了Scarlet WebSockets。使用Koin DI,我提供了如下FlowSocketApi

代码语言:javascript
复制
 single {
        return@single AndroidLifecycle.ofApplicationForeground(androidApplication())
    }

    single {
        return@single Scarlet.Builder()
            .webSocketFactory(get<OkHttpClient>().newWebSocketFactory(Wss))
            .lifecycle(get())  
            .backoffStrategy(LinearBackoffStrategy(10000))
            .addMessageAdapterFactory(GsonMessageAdapter.Factory(get()))
            .addStreamAdapterFactory(CoroutinesStreamAdapterFactory())
            .build()
            .create(FlowSocketApi::class.java)
    }

Api接口是

代码语言:javascript
复制
interface FlowSocketApi {

    @Receive
    fun observeEvents(): ReceiveChannel<WebSocket.Event>

    @Send
    fun send(message: Any): Boolean

    @Receive
    fun observeApiMessage(): ReceiveChannel<FlowSocketResponse>

}

我还有一个实现上述功能的FlowSocketService。因此,当我想要获取结果时,尽管observeEventssend方法可以正常工作,但当服务器向send发送应答时,observerApiMessage永远不会被触发。

代码语言:javascript
复制
// Works fine
flowSocketService.observeEvents().consumeAsFlow().asLiveData().observeForever {
            it?.let {
                println(it)
            }
        }


// Does not work
flowSocketService.observeApiMessage().consumeAsFlow().asLiveData().observeForever {
            it?.let {
                println("flowMessagesObserver result")
                println(it)
            } ?: run {
                println("flowMessagesObserver null")
            }
        }

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

发布于 2021-04-05 02:01:29

尝试从observeEvents()手动解码消息

代码语言:javascript
复制
`Json.decodeFromString<YourApiMessagePOJO>((it.message as Message.Text).value)`

如果这是错误的位置,那么logcat将指出发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64415552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档