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:
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. |