Kotlin unterstützt keine überprüften Ausnahmen. Dadurch wird die Fehlerbehandlung vereinfacht und optimiert, da Sie nur die Ausnahmen behandeln können, die möglicherweise wiederhergestellt werden können. Da Sie nicht jede mögliche Ausnahme explizit behandeln müssen, ist Ihr Code übersichtlicher und konzentriert sich auf seinen Hauptzweck.
Wiederherstellbare Fehler sind Probleme, die ein Entwickler von seiner Seite aus beheben kann.
Wenn beispielsweise eine in einem Aufruf verwendete ID ungültig ist, löst die API eine HomeException mit der Meldung invalid data aus. Der App-Entwickler kann dann entweder diese ID aus seinem Cache entfernen oder dem Nutzer eine Meldung wie „Struktur nicht gefunden“ anzeigen.
Beispiel für die Behandlung eines wiederherstellbaren Fehlers:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
Jede Methode in den Home APIs kann eine
HomeException auslösen. Wir empfehlen daher, einen try-catch Block zu
verwenden, um HomeException bei allen Aufrufen abzufangen.
Prüfen Sie bei der Behandlung von HomeException die Felder
error.code und
error.message, um herauszufinden, was schiefgelaufen ist. Es können auch Unterfehlercodes
vorhanden sein. Rufen Sie daher die
getSubErrorCodes() Methode auf und prüfen Sie das Ergebnis.
Alle nicht behandelten Ausnahmen führen zum Absturz Ihrer App.
In der folgenden Tabelle finden Sie die Bedeutungen der HomeException-Codes, die auftreten können:
| Code | Bedeutung |
|---|---|
ABORTED |
Der Vorgang wurde abgebrochen, in der Regel aufgrund eines Parallelitätsproblems wie einer fehlgeschlagenen Sequencer-Überprüfung oder einer abgebrochenen Transaktion. |
ALREADY_EXISTS |
Die Entität, die ein Client erstellen wollte, z. B. eine Datei oder ein Verzeichnis, ist bereits vorhanden. |
API_NOT_CONNECTED |
Der Client hat versucht, eine Methode aus einer API aufzurufen, bei der die Verbindung fehlgeschlagen ist. Das kann passieren, wenn das Gerät offline ist oder die API, die der Client aufzurufen versucht hat, nicht unterstützt. |
CANCELLED |
Der Vorgang wurde abgebrochen, üblicherweise vom Aufrufer. |
COMMAND_FAILED |
Der Befehl konnte nicht ausgeführt werden. Weitere Informationen finden Sie in den Unterfehlercodes. |
CURSOR_WINDOW_NOT_SUPPORTED |
Es wurde eine Methode aufgerufen, die ein
CursorWindow verwendet. Ein
CursorWindow ist jedoch entweder nicht aktiviert oder wird im
aktuellen Kontext nicht unterstützt. |
DATA_LOSS |
Es ist ein nicht behebbarer Datenverlust oder Datenkorruption aufgetreten. |
DEADLINE_EXCEEDED |
Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte. Bei Vorgängen, die den Systemstatus verändern, kann dieser Fehler angezeigt werden, auch wenn der Vorgang erfolgreich abgeschlossen wurde. |
DECOMMISSIONING_INELIGIBLE |
Die Außerbetriebnahme ist fehlgeschlagen, weil das Gerät nicht für die Außerbetriebnahme geeignet ist. |
FAILED_PRECONDITION |
Der Vorgang wurde abgelehnt, weil der Systemzustand nicht für die Ausführung des Vorgangs geeignet ist. Diese Meldung wird beispielsweise angezeigt, wenn der Befehl stop des OvenCavityOperationalStateTrait für einen Ofen aufgerufen wurde, der bereits angehalten ist. |
INTERNAL |
Interne Fehler. Das bedeutet, dass einige Invarianten, die vom zugrunde liegenden System erwartet werden, nicht erfüllt wurden. Dieser Fehlercode ist für schwerwiegende Fehler reserviert. |
INVALID_ARGUMENT |
Der Client hat ein Argument angegeben, das außerhalb des erwarteten Wertebereichs von Werten liegt. |
INVALID_DATA_HOLDER |
Der Datenhalter ist ungültig. |
NOT_FOUND |
Eine angeforderte Entität, beispielsweise eine Datei oder ein Verzeichnis, wurde nicht gefunden.
Wenn eine Anfrage, z. B. eine schrittweise
Einführung von Funktionen oder eine undokumentierte Zulassungsliste, NOT_FOUND
für eine gesamte Nutzerklasse abgelehnt wird, kann verwendet werden.
Wenn eine Anfrage, z. B. nutzerbasierte Zugriffssteuerung, für einige Nutzer innerhalb einer Nutzerklasse abgelehnt wird,
muss verwendet werden.PERMISSION_DENIED |
OUT_OF_RANGE |
Beim Vorgang wurde versucht, den gültigen Bereich zu überschreiten, z. B. bei einer Such- oder
Leseaktion hinter end-of-file. Im Gegensatz zu
INVALID_ARGUMENT, zeigt dieser Fehler
ein Problem an, das behoben werden kann, wenn sich der Systemstatus ändert. |
PERMISSION_DENIED |
Der Aufrufer hat keine Berechtigung zur Ausführung des angegebenen
Vorgangs. PERMISSION_DENIED darf nicht für Ablehnungen verwendet werden, die dadurch verursacht werden, dass eine Ressource erschöpft ist (verwenden Sie stattdessen RESOURCE_EXHAUSTED für diese Fehler).
PERMISSION_DENIED darf nicht verwendet werden, wenn der Aufrufer nicht ermittelt werden kann (verwenden Sie stattdessen UNAUTHENTICATED für diese Fehler).
Dieser Fehlercode impliziert nicht, dass die Anfrage gültig ist oder die
angefragte Entität existiert oder andere Vorbedingungen erfüllt. |
RESOURCE_EXHAUSTED |
Eine Ressource, z. B. ein nutzerbezogenes Kontingent
, ist erschöpft oder der Speicherplatz für das gesamte Dateisystem ist ausgegangen.
Dieser Fehler kann beispielsweise auftreten, wenn der
dispense Befehl des
DispenseTrait für ein Gerät zur Fütterung von Haustieren aufgerufen wird, aber kein Futter mehr vorhanden ist.Das kann auch daran liegen, dass ein Projektkontingent für Home APIs überschritten wurde. Weitere Informationen finden Sie unter Kontingente verwalten. |
SDK_INITIALIZATION_MISSING_INFO |
Das SDK wurde nicht mit allen erforderlichen Informationen initialisiert.
Dieser Fehler wird beispielsweise ausgelöst, wenn der Client versucht,
eine TraitFactory für eine bestimmte Trait-ID abzurufen, die Trait jedoch
bei der Initialisierung des SDK nicht berücksichtigt wurde. Weitere Informationen finden Sie unter
Home auf Android initialisieren. |
UNAUTHENTICATED |
Der Aufrufer kann nicht identifiziert werden oder die Anfrage enthält keine gültigen Authentifizierungsdaten. |
UNAVAILABLE |
Der Dienst ist nicht verfügbar. Dies ist höchstwahrscheinlich ein vorübergehender Zustand, der durch Wiederholen mit einem Backoff korrigiert werden kann. Beachten Sie, dass es nicht immer sicher ist, nicht idempotente Vorgänge zu wiederholen. |
UNIMPLEMENTED |
Der angeforderte Vorgang ist bei diesem Dienst nicht implementiert oder aktiviert oder wird nicht unterstützt. |
UNKNOWN |
Unbekannter Fehler. UNKNOWN wird angezeigt, wenn ein Fehler auftritt, der mit keinem der anderen Fehlercodes klassifiziert werden kann.
Dieser Fehler wird beispielsweise zurückgegeben, wenn ein von einer externen API erhaltener Statuswert
nicht genügend Informationen
zur Ursache enthält. |
WRITE_FAILED |
Der Schreibvorgang konnte nicht ausgeführt werden. Weitere Informationen finden Sie in den Unterfehlercodes. |