Kotlin n'accepte pas les exceptions vérifiées. Cela simplifie et rationalise la gestion des exceptions, car vous pouvez choisir de ne gérer que les exceptions potentiellement récupérables. De plus, comme vous n'avez pas à gérer explicitement toutes les exceptions possibles, votre code est moins encombré et reste donc plus axé sur son objectif principal.
Les échecs récupérables sont des problèmes qu'un développeur peut résoudre de son côté.
Par exemple, si un ID utilisé dans un appel n'est pas valide, l'API génère une HomeException avec un message invalid data. Le développeur d'applications peut alors choisir de supprimer cet ID de son cache ou d'afficher à l'utilisateur un message tel que "Structure introuvable".
Voici un exemple de gestion d'un échec récupérable :
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
N'importe quelle méthode des API Home peut générer une
HomeException. Nous vous recommandons donc d'utiliser un bloc try-catch pour
intercepter HomeException sur tous les appels.
Lorsque vous gérez HomeException, vérifiez ses
error.code et
error.message champs pour savoir ce qui s'est passé. Il peut également y avoir des codes de sous-erreur
. Appelez donc la
getSubErrorCodes() méthode et vérifiez le résultat.
Toutes les exceptions non gérées entraîneront le plantage de votre application.
Le tableau suivant indique la signification des codes HomeException que vous pouvez rencontrer :
| Code | Signification |
|---|---|
ABORTED |
L'opération a été annulée, généralement en raison d'un problème de simultanéité, tel qu'un échec de vérification du séquenceur ou un abandon de transaction. |
ALREADY_EXISTS |
L'entité qu'un client a tenté de créer (par exemple, un fichier ou un répertoire) existe déjà. |
API_NOT_CONNECTED |
Le client a tenté d'appeler une méthode à partir d'une API qui n'a pas pu se connecter. Cela peut se produire lorsque l'appareil est hors connexion ou ne prend pas en charge l'API que le client a tenté d'appeler. |
CANCELLED |
L'opération a été annulée, généralement par l'appelant. |
COMMAND_FAILED |
Impossible d'exécuter la commande. Pour en savoir plus, consultez les codes de sous-erreur. |
CURSOR_WINDOW_NOT_SUPPORTED |
Une méthode qui utilise un
CursorWindow a été appelée, mais
un CursorWindow n'est pas activé ou n'est pas pris en charge dans
le contexte actuel. |
DATA_LOSS |
Une perte ou une corruption de données irrécupérable s'est produite. |
DEADLINE_EXCEEDED |
Le délai a expiré avant que l'opération puisse se terminer. Pour les opérations qui modifient l'état du système, cette erreur peut être affichée même si l'opération s'est terminée avec succès. |
DECOMMISSIONING_INELIGIBLE |
La mise hors service a échoué, car l'appareil n'est pas éligible pour la mise hors service. |
FAILED_PRECONDITION |
L'opération a été rejetée car le système n'est pas dans un état
requis pour exécuter l'opération. Par exemple, ce message peut s'afficher si la commande stop de OvenCavityOperationalStateTrait a été appelée sur un four déjà arrêté. |
INTERNAL |
Erreurs internes. Cela signifie que certains invariants attendus par le système sous-jacent n'ont pas été respectés. Ce code d'erreur est réservé aux erreurs graves. |
INVALID_ARGUMENT |
Le client a fourni un argument qui ne se situe pas dans la plage de valeurs attendue. |
INVALID_DATA_HOLDER |
Le détenteur de données n'est pas valide. |
NOT_FOUND |
Une entité demandée (par exemple, un fichier ou un répertoire) est introuvable.
`NOT_FOUND` may be used if a request is denied for an entire class of users, such as a gradual
feature rollout or undocumented allowlist, NOT_FOUND.
`PERMISSION_DENIED` doit être utilisé si une requête est refusée pour certains utilisateurs appartenant à une classe d'utilisateurs,
telle que le contrôle des accès basé sur l'utilisateur, PERMISSION_DENIED
doit être utilisé. |
OUT_OF_RANGE |
L'opération a été tentée au-delà de la plage valide (par exemple, rechercher ou
lire après end-of-file). Contrairement à
INVALID_ARGUMENT, cette erreur
indique un problème qui peut être résolu si l'état du système change. |
PERMISSION_DENIED |
L'appelant n'a pas l'autorisation d'exécuter l'opération spécifiée. PERMISSION_DENIED ne doit pas être utilisé pour les rejets causés par l'épuisement d'une ressource (utilisez plutôt RESOURCE_EXHAUSTED pour ces erreurs).
PERMISSION_DENIED ne doit pas être utilisé si l'appelant ne peut pas être
identifié (utilisez plutôt UNAUTHENTICATED pour ces erreurs).
Ce code d'erreur n'implique pas que la requête soit valide ni que l'
entité demandée existe ou qu'elle répond à d'autres pré-requis. |
RESOURCE_EXHAUSTED |
Certaines ressources ont été épuisées, peut-être en raison d'un quota par utilisateur
atteint ou du manque d'espace dans le système de fichiers.
Par exemple, cette erreur peut être générée si la
dispense commande de la
DispenseTrait est appelée sur un distributeur d'aliments pour animaux de compagnie, mais qu'il n'y a plus de nourriture dans l'unité.Cela peut également être dû au dépassement d'un quota de projet des API Home. Pour en savoir plus, consultez la section Gestion des quotas. |
SDK_INITIALIZATION_MISSING_INFO |
Le SDK a été initialisé sans toutes les informations requises.
Par exemple, cette erreur est générée si le client tente d'
obtenir un TraitFactory pour un ID de caractéristique donné, mais que la caractéristique n'a pas été incluse lors de l'initialisation du SDK. Consultez la section
Initialiser la maison sur Android. |
UNAUTHENTICATED |
L'appelant ne peut pas être identifié ou la requête ne dispose pas d'identifiants d'authentification valides |
UNAVAILABLE |
Le service est indisponible. Il s'agit probablement d'une condition temporaire qui peut être corrigée en réessayant après avoir laissé passer un intervalle entre les tentatives. Notez qu'il n'est pas toujours sûr de relancer des opérations non idempotentes. |
UNIMPLEMENTED |
L'opération demandée n'est pas implémentée, prise en charge ni activée dans ce service. |
UNKNOWN |
Erreur inconnue. UNKNOWN s'affiche lorsqu'une condition d'erreur
se produit et qu'elle ne peut être classée à l'aide d'aucun autre code d'erreur.
Par exemple, cette erreur peut être renvoyée lorsqu'une valeur d'état reçue
d'une API externe ne contient pas suffisamment d'informations
sur la cause première. |
WRITE_FAILED |
Impossible d'exécuter l'écriture. Pour en savoir plus, consultez les codes de sous-erreur. |