应用 例外
特定于使用 App Services 和 Device Sync 的所有异常的顶级类。
此类的子类分为两大类: ServiceException和SyncException 。
ServiceException是由通过 HTTP 请求直接与 App Services 通信的所有 API 抛出的。 io.realm.kotlin.mongodb.App 、 io.realm.kotlin.mongodb.User和io.realm.kotlin.mongodb.auth.EmailPasswordAuth类处理 SDK 的 HTTP 请求。
SyncException由使用 Device Sync API(即使用 io.realm.kotlin.MongoDB SyncConfiguration 打开 Realm)时引起的错误引发。这些错误通过 io.realm.kotlin.mongodb.SyncConfiguration.Builder.errorHandler 传播。
每个类别又进一步划分:
位于层次结构底部的异常是可操作的,即应从异常中清楚可以采取哪些操作来解决它。
异常在层次结构的更高位置对错误进行分类。 以对应用的最终用户有意义的单一方式对它们做出React可能比较困难,但应将其记录下来以供日后检查。
在大多数情况下,只有位于层次结构底部的异常才会记录在 API 文档中,其中一个值得注意的特殊情况: ConnectionException 。 假定此异常是由所有提及ServiceException并涵盖所有传输错误的方法引发的。 这些通常是间歇性的,因此捕获此异常并重试通常应该是安全的,但可以在ConnectionException的文档中找到更多信息。
考虑到上述异常层次结构,处理错误的合理方法可能如下所示:
val app = App.with("my-app-id")
runCatching {
app.login(Credentials.emailPassword("myemail@mail.com", "mypassword"))
}.onSuccess {
gotoMainScreen()
}.onFailure { ex: Throwable ->
when(ex) {
is InvalidCredentialsException -> {
showWrongPasswordDialog()
}
is ConnectionException -> {
CrashLogger.log(ex.toString())
showRetryLoginDialog()
}
else -> {
CrashLogger.log(ex.toString())
showContactAdministratorDialog()
}
}
}
有关特定异常的更多信息,请参阅该异常的文档。