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 usar 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 interrompida. Isso geralmente aparece quando há um problema de simultaneidade, como falha na verificação de sequência ou cancelamento da transação. |
ALREADY_EXISTS |
O recurso ou a entidade que você está tentando criar já existe. Por exemplo, uma programação nomeada para um termostato. |
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 você está tentando chamar. |
CANCELLED |
A operação foi cancelada, geralmente pelo chamador |
DATA_LOSS |
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. |
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 chamou
stop
em um forno que já está parado. |
INTERNAL |
Erros internos. Isso significa que algumas invariantes esperadas pelo sistema subjacente foram corrompidas. Este código do erro é reservado para erros graves. |
INVALID_ARGUMENT |
Você forneceu um argumento fora do intervalo esperado de valores. |
NOT_FOUND |
Você especificou uma entidade ou um recurso que não pode ser encontrado. Por
exemplo, especificar um ID de faixa inexistente ao chamar
activateAudioTrack em um dispositivo de player de mídia. |
OUT_OF_RANGE |
Um parâmetro excedeu o intervalo válido com base no estado atual do sistema. Essa mensagem ocorre quando o valor está dentro do intervalo de valores que a chamada de API pode aceitar, mas não faz sentido no contexto atual. |
PERMISSION_DENIED |
Você não tem permissão para executar a operação especificada. Esse código de erro não significa que a solicitação é válida. |
RESOURCE_EXHAUSTED |
Alguns recursos foram esgotados. Por exemplo, isso pode ser gerado
quando alguém chama
dispense em um dispositivo de comedouro para animais de estimação e não há
mais comida na unidade. |
SDK_INITIALIZATION_MISSING_INFO |
O SDK não foi totalmente inicializado. Por exemplo, você vai receber esta
mensagem se tentar acessar um TraitFactory para um atributo que
não foi registrado. Consulte
Inicialização. |
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, não é compatível ou não está ativada neste serviço. |
UNKNOWN |
Erro desconhecido. Em geral, 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. |