Error management¶
Los errores que se producen en el contexto del SDK se envuelven en un tipo de excepción: D2Error, con los siguientes campos:
| Atributo | Tipo | Opcional | Descripción |
|---|---|---|---|
| errorComponent | D2ErrorComponent | verdadero | Origen del error: base de datos, SDK o servidor. |
| errorCode | D2ErrorCode | verdadero | Código de error único definido por el SDK |
| errorDescription | Cadena | verdadero | Descripción del error en inglés (detalles técnicos, solo para registros y depuración). |
| httpErrorCode | Entero | falso | Si es causado por una solicitud HTTP, código de error HTTP. |
| originalException | Excepción | falso | Excepción Java original que causa el error, si lo hubiera. |
Cualquier operación solicitada al SDK puede generar un error.
-
For
suspendoperations, the error is thrown directly and can be caught as usual:try { d2.userModule().suspendLogIn(username, password, url) } catch (d2Error: D2Error) { Log.e("LOGIN", "${d2Error.errorComponent()} ${d2Error.httpErrorCode()} ${d2Error.errorCode()}") } -
Para las operaciones que devuelven objetos RxJava, los errores se pueden extraer de la siguiente manera:
d2.userModule().rxLogIn(username, password, url) .subscribe( { user -> }, { error -> if (error is D2Error) { Log.e("LOGIN", "${error.errorComponent()} ${error.httpErrorCode()} ${error.errorCode()}") } }, ) -
Para las operaciones de bloqueo, también es posible recuperar un
D2Error. The errors can be extracted by catching them as shown in the following fragmento de código:try { d2.userModule().blockingLogIn(username, password, url) } catch (e: Exception) { val cause = e.cause if (cause is D2Error) { Log.e("LOGIN", "${cause.errorComponent()} ${cause.httpErrorCode()} ${cause.errorCode()}") } }
D2Errors se conservan en la base de datos cuando ocurren, por lo que pueden ser analizados posteriormente y diagnosticar posibles problemas. Se puede acceder a ellos a través de su propio repositorio:
d2.maintenanceModule().d2Errors()
.byD2ErrorComponent().eq(D2ErrorComponent.Server)
.suspendGet()
El equipo de SDK ahora está trabajando junto con el equipo principal para proporcionar una lista completa de códigos de error comunes, pero aún es un trabajo en progreso.