Kotlin n'est pas compatible avec les exceptions vérifiées. Cela simplifie et accélère la gestion des erreurs, car vous pouvez choisir de ne gérer que les exceptions potentiellement récupérables. Et comme vous n'avez pas à gérer explicitement toutes les exceptions possibles, votre code est moins encombré et, par conséquent, reste 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 exception HomeException
avec un message invalid data
. Le développeur de l'application peut ensuite choisir de supprimer cet ID de son cache ou d'afficher un message tel que "Structure introuvable" à l'utilisateur.
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}",
)
}
Toute méthode des API Home peut générer une exception HomeException
. Nous vous recommandons donc d'utiliser un bloc try-catch
pour intercepter les exceptions HomeException
sur tous les appels.
Lorsque vous gérez HomeException
, vérifiez ses champs code
et message
pour savoir ce qui s'est mal passé.
Toute exception non gérée entraînera 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é interrompue. Ce problème apparaît généralement en cas de problème de simultanéité, tel qu'un échec de vérification de séquence ou un abandon de transaction. |
ALREADY_EXISTS |
La ressource ou l'entité que vous essayez de créer existe déjà. Il peut s'agir, par exemple, d'une programmation nommée pour un thermostat. |
API_NOT_CONNECTED |
Le client a tenté d'appeler une méthode à partir d'une API qui n'a pas réussi à se connecter. Cela peut se produire lorsque l'appareil est hors connexion ou qu'il n'est pas compatible avec l'API que vous essayez d'appeler. |
CANCELLED |
L'opération a été annulée, généralement par l'appelant. |
DATA_LOSS |
Perte ou corruption de données irrécupérable. |
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. |
FAILED_PRECONDITION |
L'opération a été refusée, car le système n'est pas dans un état requis pour l'exécuter. Par exemple, ce message peut s'afficher si vous avez appelé stop sur un four qui est déjà arrêté. |
INTERNAL |
Erreurs internes. Cela signifie que certains invariants attendus par le système sous-jacent ont été enfreints. Ce code d'erreur est réservé aux erreurs graves. |
INVALID_ARGUMENT |
Vous avez fourni un argument qui ne se trouve pas dans la plage de valeurs attendue. |
NOT_FOUND |
Vous avez spécifié une entité ou une ressource introuvable. Par exemple, spécifier un ID de piste inexistant lors de l'appel de
activateAudioTrack sur un appareil de lecteur multimédia. |
OUT_OF_RANGE |
Un paramètre a dépassé la plage valide, en fonction de l'état actuel du système. Ce message s'affiche lorsque la valeur se trouve dans la plage de valeurs que l'appel d'API pourrait potentiellement accepter, mais qu'elle n'a pas de sens dans le contexte actuel. |
PERMISSION_DENIED |
Vous n'êtes pas autorisé à exécuter l'opération spécifiée. Ce code d'erreur ne doit pas être interprété comme signifiant que la requête est valide. |
RESOURCE_EXHAUSTED |
Certaines ressources sont épuisées. Par exemple, cette exception peut être générée lorsqu'on appelle
dispense sur un distributeur de nourriture pour animaux et qu'il n'y a plus de nourriture dans l'appareil. |
SDK_INITIALIZATION_MISSING_INFO |
Le SDK n'a pas été entièrement initialisé. Par exemple, ce message s'affiche si vous essayez d'obtenir un TraitFactory pour un trait qui n'a pas été enregistré. Consultez la section Initialisation. |
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 situation 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. En règle générale, UNKNOWN s'affiche lorsqu'une condition d'erreur se produit et ne peut être classée à l'aide d'aucun des autres codes d'erreur. Par exemple, cette erreur peut être renvoyée lorsqu'une valeur d'état reçue d'une API externe ne dispose pas d'informations suffisantes sur la cause du problème. |