アプリ 例外
App Services と Device Sync の使用に固有のすべての例外の最上位クラス。
このクラスのサブクラスは、 ServiceExceptionとSyncExceptionの 2 つの大きなカテゴリに分類されます。
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 ドキュメントには階層の最下位にある例外のみが 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()
}
}
}
具体的な例外の詳細については、その例外に関するドキュメントを参照してください。