Gestione degli errori

Kotlin non supporta le eccezioni verificate. In questo modo, la gestione degli errori viene semplificata e ottimizzata, perché puoi scegliere di gestire solo le eccezioni potenzialmente recuperabili. Inoltre, poiché non devi gestire esplicitamente ogni possibile eccezione, il codice è meno disordinato e, di conseguenza, rimane più incentrato sul suo scopo principale.

Gli errori recuperabili sono problemi che uno sviluppatore può risolvere autonomamente. Ad esempio, se un ID utilizzato in una chiamata non è valido, l'API genera un messaggio HomeException con un messaggio invalid data. Lo sviluppatore dell'app può quindi scegliere di rimuovere l'ID dalla cache o mostrare all'utente un messaggio come "Struttura non trovata".

Un esempio di come gestire un errore recuperabile:

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

Qualsiasi metodo nelle API Home può generare un HomeException, pertanto ti consigliamo di utilizzare un blocco try-catch per intercettare HomeException in tutte le chiamate.

Quando gestisci HomeException, controlla i campi code e message per scoprire cosa è andato storto.

Eventuali eccezioni non gestite causeranno l'arresto anomalo dell'app.

La tabella seguente fornisce i significati dei codici HomeException che potresti riscontrare:

Tabella: HomeException codici
Codice Significato
ABORTED L'operazione è stata interrotta. Questo messaggio viene visualizzato in genere quando si verifica un problema di concorrenza, ad esempio un errore di controllo della sequenza o un'interruzione della transazione.
ALREADY_EXISTS La risorsa o l'entità che stai tentando di creare esiste già. ad esempio una programmazione denominata per un termostato.
API_NOT_CONNECTED Il client ha tentato di chiamare un metodo da un'API che non è riuscito a connettersi. Questo può accadere quando il dispositivo è offline o non supporta l'API che stai tentando di chiamare.
CANCELLED L'operazione è stata annullata, in genere dal chiamante.
DATA_LOSS Perdita di dati non recuperabili o danneggiamento dei dati.
DEADLINE_EXCEEDED La scadenza è scaduta prima del completamento dell'operazione. Per le operazioni che modificano lo stato del sistema, questo errore può essere restituito anche se l'operazione è stata completata correttamente.
FAILED_PRECONDITION L'operazione è stata rifiutata perché il sistema non è nello stato richiesto per l'esecuzione dell'operazione. Ad esempio, potresti ricevere questo messaggio se hai chiamato stop su un forno già spento.
INTERNAL Errori interni. Ciò significa che alcune invarianti previste dal sistema di base sono state violate. Questo codice di errore è riservato per errori gravi.
INVALID_ARGUMENT Hai fornito un argomento che non rientra nell'intervallo di valori previsto.
NOT_FOUND Hai specificato un'entità o una risorsa che non è possibile trovare. Ad esempio, specificare un ID traccia inesistente quando si chiama activateAudioTrack su un dispositivo media player.
OUT_OF_RANGE Un parametro ha superato l'intervallo valido, in base allo stato corrente del sistema. Questo messaggio viene visualizzato quando il valore rientra nell'intervallo di valori che la chiamata API potrebbe potenzialmente accettare, ma non ha senso nel contesto attuale.
PERMISSION_DENIED Non disponi dell'autorizzazione per eseguire l'operazione specificata. Questo codice di errore non deve essere interpretato come se la richiesta fosse valida.
RESOURCE_EXHAUSTED Risorsa esaurita. Ad esempio, questo errore potrebbe verificarsi quando si chiama dispense su un dispositivo per l'alimentazione degli animali domestici e non c'è più cibo nell'unità.
SDK_INITIALIZATION_MISSING_INFO L'SDK non è stato inizializzato completamente. Ad esempio, riceverai questo messaggio se provi a ottenere un TraitFactory per un tratto che non è stato registrato. Consulta Inizializza.
UNAUTHENTICATED Il chiamante non può essere identificato o la richiesta non ha credenziali di autenticazione valide.
UNAVAILABLE Il servizio non è disponibile. Molto probabilmente si tratta di una condizione transitoria, che può essere corretta riprovando con un backoff. Tieni presente che non è sempre sicuro riprovare le operazioni non idempotenti.
UNIMPLEMENTED L'operazione richiesta non è implementata, supportata o abilitata in questo servizio.
UNKNOWN Errore sconosciuto. In generale, UNKNOWN viene visualizzato quando si verifica una condizione di errore che non può essere classificata utilizzando nessuno degli altri codici di errore. Ad esempio, questo errore può essere restituito quando un valore di stato ricevuto da un'API esterna non contiene informazioni sufficienti sulla causa principale.