Como lidar com erros

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:

Tabela: códigos HomeException
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.