错误管理{ #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团队正在与核心团队合作,以提供常见错误代码的完整列表,但这仍在进行中。