跳转至
For the complete DHIS2 documentation index, see llms.txt.

错误管理{ #android_sdk_error_management }

在 SDK 上下文中发生的错误被封装在一种异常类型中:"D2Error",其中包含以下字段:

属性 类型 可选的 描述
错误组件 D2错误组件 真正 错误源:数据库,SDK或服务器。
错误代码 D2错误代码 真正 SDK定义的唯一错误代码。
错误说明 真正 错误的英语描述(技术细节,仅用于日志和调试)。
http错误代码 整数 如果由HTTP请求引起,则为HTTP错误代码。
原始异常 例外 导致错误的原始Java异常(如果有)。

向 SDK 请求的任何操作都可能引发错误。

  • 对于返回 RxJava 对象的操作,可以提取错误 通过以下方式:

    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());
                }
            }
        );
    
  • 对于阻塞操作,也可以检索D2Error。 可以通过缓存错误来提取错误,如下所示 代码片段:

    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 发生时会保留在数据库中,因此可以 事后分析并诊断可能存在的问题。他们可以被访问 通过它自己的存储库:

d2.maintenanceModule().d2Errors()
    .byD2ErrorComponent().eq(D2ErrorComponent.Server)
    .get();

现在,SDK团队正在与核心团队合作,以提供常见错误代码的完整列表,但这仍在进行中。