O Kotlin não oferece suporte a excessões verificadas. Isso simplifica e simplifica o processamento de erros, porque você pode processar apenas as exceções que podem ser recuperadas. E como você não precisa processar explicitamente todas as exceções possíveis, seu código fica menos confuso e, consequentemente, permanece mais focado no objetivo principal.
As falhas recuperáveis são problemas que um desenvolvedor pode resolver.
Por exemplo, se um ID usado em uma chamada não for válido, a API vai gerar uma
HomeException
com uma mensagem invalid data
. O desenvolvedor do app pode
remover esse ID do cache ou mostrar ao usuário uma mensagem
como "Estrutura não encontrada".
Exemplo de como lidar com uma falha recuperável:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
Qualquer método nas APIs Home pode gerar uma
HomeException
. Por isso, recomendamos o uso de um bloco try-catch
para capturar
HomeException
em todas as chamadas.
Ao processar HomeException
, verifique os campos code
e message
para saber o que deu errado.
Qualquer exceção não processada vai resultar em falha no app.
A tabela a seguir mostra o significado dos códigos HomeException
que você
pode encontrar:
Código | Significado |
---|---|
ABORTED
| A operação foi cancelada, normalmente devido a um problema de simultaneidade, como falha na verificação do sequenciador ou cancelamento da transação. |
ALREADY_EXISTS |
A entidade que um cliente tentou criar, por exemplo, um arquivo ou diretório, já existe. |
API_NOT_CONNECTED |
O cliente tentou chamar um método de uma API que não conseguiu se conectar. Isso pode acontecer quando o dispositivo está off-line ou não oferece suporte à API que o cliente tentou chamar. |
CANCELLED |
A operação foi cancelada, geralmente pelo chamador |
DATA_LOSS |
Houve perda ou corrupção irrecuperável de dados. |
DEADLINE_EXCEEDED |
O prazo expirou antes do término da operação. Para operações que mudam o estado do sistema, esse erro pode ser retornado mesmo que a operação tenha sido concluída com sucesso. |
FAILED_PRECONDITION |
A operação foi rejeitada porque o estado do sistema não é o necessário para a execução dela. Por exemplo, você pode receber
esta mensagem se o comando stop do
OvenCavityOperationalStateTrait foi chamado em um
forno que já foi interrompido ou se você tentou executar uma
operação rmdir em um elemento que não é um diretório. |
INTERNAL |
Erros internos. Isso significa que algumas invariantes esperadas pelo sistema subjacente foram corrompidas. Este código de erro é reservado para erros graves. |
INVALID_ARGUMENT |
O cliente forneceu um argumento fora do intervalo esperado de valores. |
NOT_FOUND |
Uma entidade solicitada, como um arquivo ou diretório, não foi encontrada.
Se uma solicitação for negada para uma classe inteira de usuários, como a implementação gradual
de recursos ou a lista de permissões não documentada, NOT_FOUND
poderá ser usado.
Se uma solicitação for negada para alguns usuários de uma classe,
como o controle de acesso baseado em usuário, PERMISSION_DENIED
precisará ser usado. |
OUT_OF_RANGE |
Houve uma tentativa da operação depois do intervalo válido, como a busca ou
a leitura após end-of-file . Diferentemente de
INVALID_ARGUMENT , este erro
indica um problema que poderá ser corrigido se o estado do sistema mudar. |
PERMISSION_DENIED |
O autor da chamada não tem permissão para executar a operação
especificada. PERMISSION_DENIED não pode ser usado para
rejeições causadas
pelo esgotamento de algum recurso. Use RESOURCE_EXHAUSTED
para esses erros.
PERMISSION_DENIED não poderá ser usado se o autor da chamada não for
identificado. Use UNAUTHENTICATED para esses erros.
Esse código de erro não indica que a solicitação seja válida nem que a
entidade solicitada exista ou satisfaça outras condições prévias. |
RESOURCE_EXHAUSTED |
Houve o esgotamento de algum recurso, como uma cota por usuário.
Também é possível que todo sistema de arquivos esteja sem espaço.
Por exemplo, esse erro pode ser gerado se o comando dispense do DispenseTrait for chamado em um dispositivo de comedouro de animais de estimação, mas não houver mais comida na unidade. |
SDK_INITIALIZATION_MISSING_INFO |
O SDK foi inicializado sem todas as informações necessárias.
Por exemplo, esse erro é gerado se o cliente tentar
acessar um TraitFactory para um determinado ID de atributo, mas o atributo não
foi incluído ao inicializar o SDK. Consulte
Inicializar a casa no Android. |
UNAUTHENTICATED |
O autor da chamada não pode ser identificado ou a solicitação não tem credenciais de autenticação válidas. |
UNAVAILABLE |
O serviço está indisponível. Muito provavelmente, trata-se de uma condição temporária, que pode ser corrigida ao tentar novamente com uma retirada. Nem sempre é seguro repetir operações não idempotentes. |
UNIMPLEMENTED |
A operação solicitada não foi implementada, aceita nem ativada neste serviço. |
UNKNOWN |
Erro desconhecido. UNKNOWN aparece quando ocorre uma condição de erro
que não pode ser classificada usando nenhum dos outros códigos de erro.
Por exemplo, esse erro pode ser retornado quando um valor de status recebido
de uma API externa não tem informações suficientes
sobre a causa raiz. |