gpt4 book ai didi

android - 在带有 Kotlin 和流程的 Android 上使用带有 Apollo 的 GraphQL 订阅时处理网络错误

转载 作者:行者123 更新时间:2023-12-04 23:58:50 30 4
gpt4 key购买 nike

我在 Android 上使用 Apollo GraphQL。我正在使用 Apollo ver 3。我有订阅,我可以成功订阅并获取更新。问题是,如果我在应用程序上打开 fligth 模式,则会崩溃,但出现以下异常:

    java.lang.IllegalStateException: WeSocket queue full
at com.apollographql.apollo3.network.ws.DefaultWebSocketEngine$open$3.send(OkHttpWebSocketEngine.kt:90)
at com.apollographql.apollo3.network.ws.WsProtocol.sendMessageMapBinary(WsProtocol.kt:92)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol.stopOperation(SubscriptionWsProtocol.kt:69)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport$3.invokeSuspend(WebSocketNetworkTransport.kt:144)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:920)

我尝试在返回的流上使用 catch 但它不起作用。这就是我所做的:

apolloClient.subscribe(ProfileSubscription()).execute().catch {  }

定义订阅的.grapql文件是:

subscription Profile {
syncStatus {
offline
}
}

我通过调用创建了 Apollo 客户端:

ApolloClient.Builder()
.networkTransport(
WebSocketNetworkTransport(
serverUrl = baseUrl
)
).build()

基本 url 使用 ws 作为协议(protocol):

ws://ec2-xx-xxx-xxx-xx.eu-west-2.compute.amazonaws.com:4000/graphql

如何优雅地处理异常?

最佳答案

我刚刚处理了流程开始时的异常:

viewModelScope.launch(CoroutineExceptionHandler{ _, _ -> }) {
profilesUpdatesUseCase.subscribe()
}

profilesUpdatesUseCase.subscribe() 方法调用:

apolloClient.subscribe(ProfileSubscription()).execute()

当然,ViewModel 需要在可能的情况下最终重新启动流程。

关于android - 在带有 Kotlin 和流程的 Android 上使用带有 Apollo 的 GraphQL 订阅时处理网络错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70008541/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com