Kotlin no admite excepciones verificadas. Esto simplifica y optimiza la administración de errores, ya que puedes optar por controlar solo aquellas excepciones que sean potencialmente recuperables. Y como no tienes que controlar de forma explícita todas las excepciones posibles, tu código es menos desordenado y, en consecuencia, se mantiene más enfocado en su propósito principal.
Las fallas recuperables son problemas que un desarrollador puede abordar desde su extremo.
Por ejemplo, si un ID que se usa en una llamada no es válido, la API arroja un HomeException
con un mensaje invalid data
. Luego, el desarrollador de la app puede quitar ese ID de su caché o mostrarle al usuario un mensaje como "No se encontró la estructura".
Este es un ejemplo de cómo se puede controlar una falla recuperable:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
Cualquier método de las APIs de Home puede generar una HomeException
, por lo que te recomendamos que uses un bloque try-catch
para capturar HomeException
en todas las llamadas.
Cuando controles HomeException
, verifica sus campos code
y message
para saber qué salió mal.
Cualquier excepción no controlada hará que la app falle.
En la siguiente tabla, se proporcionan los significados de los códigos HomeException
que podrías encontrar:
Código | Significado |
---|---|
ABORTED |
Se anuló la operación. Por lo general, aparece cuando hay un problema de simultaneidad, como una falla en la verificación de secuencias o la anulación de transacciones. |
ALREADY_EXISTS |
El recurso o la entidad que intentas crear ya existe. Por ejemplo, puede ser un programa con nombre para un termostato. |
API_NOT_CONNECTED |
El cliente intentó llamar a un método de una API que no pudo conectarse. Esto puede ocurrir cuando el dispositivo está sin conexión o no es compatible con la API a la que intentas llamar. |
CANCELLED |
La operación se canceló (por lo general, la cancela el emisor). |
DATA_LOSS |
Daño o pérdida de datos no recuperable. |
DEADLINE_EXCEEDED |
El plazo venció antes de que la operación se pudiera completar. En el caso de las operaciones que cambian el estado del sistema, es probable que se muestre este error incluso si la operación se completó correctamente. |
FAILED_PRECONDITION |
La operación se rechazó porque el sistema no se encuentra en un estado necesario para la ejecución de la operación. Por ejemplo, es posible que recibas este mensaje si llamaste a stop en un horno que ya está detenido. |
INTERNAL |
Errores internos. Esto significa que algunos invariantes que espera el sistema subyacente están rotos. Este código de error está reservado para errores graves. |
INVALID_ARGUMENT |
Proporcionaste un argumento que está fuera del rango esperado de valores. |
NOT_FOUND |
Especificaste una entidad o un recurso que no se puede encontrar. Por ejemplo, especificar un ID de pista inexistente cuando se llama a
activateAudioTrack en un dispositivo de reproductor multimedia |
OUT_OF_RANGE |
Un parámetro superó el rango válido según el estado actual del sistema. Este mensaje se produce cuando el valor está dentro del rango de valores que la llamada a la API podría aceptar, pero no tiene sentido en el contexto actual. |
PERMISSION_DENIED |
No tienes permiso para ejecutar la operación especificada. Este código de error no debe interpretarse como que la solicitud es válida de otra manera. |
RESOURCE_EXHAUSTED |
Se agotó algún recurso. Por ejemplo, esto podría ocurrir cuando se llama a
dispense en un dispositivo de alimentación para mascotas y no queda comida en la unidad. |
SDK_INITIALIZATION_MISSING_INFO |
El SDK no se inicializó por completo. Por ejemplo, recibirás este mensaje si intentas obtener un TraitFactory para un atributo que no se registró. Consulta Inicialización. |
UNAUTHENTICATED |
No se puede identificar al emisor o la solicitud no tiene credenciales de autenticación válidas. |
UNAVAILABLE |
El servicio no está disponible. Lo más probable es que esta sea una condición transitoria y que se pueda corregir si vuelves a intentar una retirada. Ten en cuenta que no siempre es seguro reintentar operaciones no idempotentes. |
UNIMPLEMENTED |
La operación solicitada no se implementó, no se admite o no está habilitada en este servicio. |
UNKNOWN |
Error desconocido. En términos generales, UNKNOWN aparece cuando se produce una condición de error que no se puede clasificar con ninguno de los otros códigos de error. Por ejemplo, este error puede mostrarse cuando se recibe un valor de estado de una API externa que no tiene suficiente información sobre la causa raíz. |