Ir para o conteúdo
For the complete DHIS2 documentation index, see llms.txt.

Error management

Os erros que acontecem no contexto do SDK estão envolvidos em um tipo de exceção: D2Error, com os seguintes campos:

Atributo Modelo Opcional Descrição
errorComponent D2ErrorComponent verdade Origem do erro: Banco de dados, SDK ou servidor.
Erro de código D2ErrorCode verdade Código de erro exclusivo definido pelo SDK.
descrição de erro Corda verdade Descrição do erro em inglês (detalhes técnicos, apenas para logs e depuração).
httpErrorCode Inteiro falso Se causado por solicitação HTTP, código de erro HTTP.
originalException Exceção falso Exceção Java original que causa o erro, se houver.

Qualquer operação solicitada ao SDK pode gerar um erro.

  • For suspend operations, 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 operações que retornam objectos RxJava, os erros podem ser extraídos Da seguinte maneira:

    d2.userModule().rxLogIn(username, password, url)
        .subscribe(
            { user -> },
            { error ->
                if (error is D2Error) {
                    Log.e("LOGIN", "${error.errorComponent()} ${error.httpErrorCode()} ${error.errorCode()}")
                }
            },
        )
    
  • Para operações de bloqueio, também é possível recuperar um 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 são persistidos no banco de dados quando ocorrem, então eles podem ser analisado posteriormente e diagnosticar possíveis problemas. Eles podem ser acessados através de seu próprio repositório:

d2.maintenanceModule().d2Errors()
    .byD2ErrorComponent().eq(D2ErrorComponent.Server)
    .suspendGet()

A equipe do SDK agora está trabalhando junto com a equipe principal para fornecer uma lista completa de códigos de erro comuns, mas ainda é um trabalho em andamento.