Aplicação Exceção
Classe de nível superior para todas as exceções específicas de uso do App Services e do Realm Mobile Sync.
As subclasses desta classe se enquadram em duas categorias amplas: ServiceException e SyncException.
ServiceExceptions são lançadas por todas as APIs que se comunicam diretamente com o App Services por meio de solicitações HTTP. As classes io.realm.kotlin.mongodb.App, io.realm.kotlin.mongodb.User e io.realm.kotlin.mongodb.auth.EmailPasswordAuth lidam com solicitações HTTP para o SDK.
SyncException 's são lançados por erros causados ao usar Realm Mobile Sync API, ou seja, Realms abertos usando um io.realm.kotlin.MongoDB.SyncConfiguration. Esses erros se propagam por meio do io.realm.kotlin.mongodb.SyncConfiguration.Builder.errorHandler.
Cada uma dessas categorias é dividida ainda mais:
As exceções na parte inferior da hierarquia são aplicáveis, ou seja, deve ficar claro a partir da exceção qual ação pode ser executada para resolvê-la.
Exceções mais acima na hierarquia categorizam os erros. Pode ser mais difícil React a eles de uma única maneira que faça sentido para os usuários finais de um aplicativo, mas deve ser registrado para inspeção posterior.
Na maioria dos casos, apenas exceções na parte inferior da hierarquia serão documentadas na documentação da API, com um caso especial notável: ConnectionException . Supõe-se que essa exceção seja lançada por todos os métodos que mencionam uma ServiceException e abrangem todos os erros de transporte. Eles geralmente são intermitentes, portanto, detectar essa exceção e tentar novamente geralmente deve ser seguro, mas mais informações podem ser encontradas na documentação de ConnectionException .
Com a hierarquia de exceções acima em mente, uma maneira sensata de lidar com erros pode ser assim:
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()
}
}
}
Para obter mais informações sobre exceções específicas, consulte a documentação dessa exceção.