Saltar a contenido
For the complete DHIS2 documentation index, see llms.txt.

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.

  • Para las operaciones que devuelven objetos RxJava, los errores se pueden extraer de la siguiente manera:

    d2.userModule().logIn(username, password, url)
        .subscribe(
            user -> { },
            error -> {
                if (error instanceof D2Error) {
                    D2Error d2Error = (D2Error) error;
                    Log.e("LOGIN", d2Error.errorComponent() + " " + d2Error.httpErrorCode() + " " + d2Error.errorCode());
                }
            }
        );
    
  • Para las operaciones de bloqueo, también es posible recuperar un D2Error. Los errores se pueden extraer almacenándolos en caché, como se muestra a continuación fragmento de código:

    try {
        d2.userModule().blockingLogIn(username, password, url);
    } catch (Exception e) {
        if (e.getCause() instanceof D2Error) {
            D2Error d2Error = (D2Error) e.getCause();
            Log.e("LOGIN", d2Error.errorComponent() + " " + d2Error.httpErrorCode() + " " + d2Error.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)
    .get();

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.