es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejar error de red al usar suscripción GraphQL con Apollo en Android con Kotlin y flujos.

Estoy usando Apollo GraphQL en Android. Estoy usando la versión 3 de Apollo.
Tengo una suscripción y puedo suscribirme con éxito y recibir las actualizaciones.
El problema es que si activo el modo de vuelo, la aplicación falla con la excepción:

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)

He intentado usar catch en el flujo devuelto, pero no funciona.
Esto es lo que hago:

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

El archivo .grapql que define la suscripción es:

subscription Profile {
syncStatus {
offline
}
}

y creo el cliente Apollo llamando a:

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

La URL base utiliza ws como protocolo:

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

¿Cómo puedo manejar las excepciones de manera elegante?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás utilizando Apollo GraphQL en Android con la versión 3. Te has suscrito con éxito y estás recibiendo actualizaciones, sin embargo, cuando activas el modo avión, la aplicación se bloquea con la excepción java.lang.IllegalStateException: WeSocket queue full. Has intentado usar catch en el flujo devuelto, pero no funciona.

    El archivo GraphQL que define la suscripción es:

    subscription Profile {
    syncStatus {
    offline
    }
    }

    El cliente de Apollo se crea llamando a:

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

    La URL base utiliza ws como protocolo:

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

    Para manejar las excepciones de manera elegante, puedes probar a utilizar un bloque try-catch para capturar la excepción y manejarla en consecuencia. También puedes probar a usar un WebSocketListener para escuchar cualquier error que ocurra y manejarlo en consecuencia.

Comments are closed.