Kotlin unterstützt keine geprüften Ausnahmen. Dies vereinfacht und optimiert die Fehlerbehandlung, da Sie nur die Ausnahmen behandeln können, die potenziell behebbar sind. Da Sie nicht jede mögliche Ausnahme explizit behandeln müssen, ist Ihr Code weniger unübersichtlich und bleibt daher stärker auf seinen Hauptzweck ausgerichtet.
Behebbare Fehler sind Probleme, die ein Entwickler selbst beheben kann.
Wenn beispielsweise eine in einem Aufruf verwendete ID ungültig ist, gibt die API einen HomeException mit einer invalid data-Meldung aus. Der App-Entwickler kann dann entweder diese ID aus seinem Cache entfernen oder dem Nutzer eine Meldung wie „Gebäude nicht gefunden“ anzeigen.
Beispiel für den Umgang mit einem behebbaren Fehler:
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, bei allen Aufrufen einen try-catch-Block zu verwenden, um HomeException abzufangen.
Prüfen Sie beim Umgang mit HomeException die Felder
error.code und
error.message, um herauszufinden, was schiefgelaufen ist. Es kann auch Unterfehlercodes geben. Rufen Sie daher die Methode
getSubErrorCodes() auf und prüfen Sie das Ergebnis.
Nicht behandelte Ausnahmen führen zum Absturz der App.
In der folgenden Tabelle finden Sie die Bedeutung 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 von einer API aufzurufen, die keine Verbindung herstellen konnte. Dies kann passieren, wenn das Gerät offline ist oder die API, die der Client aufrufen wollte, 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, aber ein CursorWindow ist im aktuellen Kontext entweder nicht aktiviert oder wird nicht unterstützt. |
DATA_LOSS |
Es liegt ein nicht wiederherstellbarer Datenverlust bzw. eine irreparable Datenbeschädigung vor. |
DEADLINE_EXCEEDED |
Die Frist ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte. Bei Vorgängen, die den Status des Systems ändern, kann dieser Fehler auch dann zurückgegeben werden, wenn der Vorgang erfolgreich abgeschlossen wurde. |
DECOMMISSIONING_INELIGIBLE |
Die Außerbetriebnahme ist fehlgeschlagen, weil das Gerät nicht außer Betrieb genommen werden kann. |
FAILED_PRECONDITION |
Der Vorgang wurde abgelehnt, weil sich das System nicht in einem für die Ausführung des Vorgangs erforderlichen Zustand befindet. Diese Meldung wird beispielsweise angezeigt, wenn der Befehl stop des OvenCavityOperationalStateTrait für einen Ofen aufgerufen wurde, der bereits ausgeschaltet ist. |
INTERNAL |
Interne Fehler. Das bedeutet, dass einige vom zugrunde liegenden System erwartete Invarianten verletzt wurden. Dieser Fehlercode ist für schwerwiegende Fehler reserviert. |
INVALID_ARGUMENT |
Der Client hat ein Argument angegeben, das außerhalb des erwarteten Wertebereichs liegt. |
INVALID_DATA_HOLDER |
Der Dateninhaber ist ungültig. |
NOT_FOUND |
Eine angeforderte Entität, z. B. eine Datei oder ein Verzeichnis, wurde nicht gefunden.
Wenn eine Anfrage, z. B. eine schrittweise Einführung von Funktionen oder eine undokumentierte Zulassungsliste, für eine gesamte Nutzerklasse abgelehnt wird, kann NOT_FOUND verwendet werden.
Wenn eine Anfrage, z. B. nutzerbasierte Zugriffssteuerung, für einige Nutzer innerhalb einer Nutzerklasse abgelehnt wird, muss PERMISSION_DENIED verwendet werden. |
OUT_OF_RANGE |
Beim Vorgang wurde versucht, den gültigen Bereich zu überschreiten, z. B. durch Suchen oder Lesen über end-of-file hinaus. 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 ist erschöpft, möglicherweise weil ein Kontingent pro Nutzer erreicht wurde oder der Speicherplatz im gesamten Dateisystem erschöpft ist.
Dieser Fehler kann beispielsweise auftreten, wenn der Befehl dispense des DispenseTrait auf einem Futterautomaten aufgerufen wird, aber kein Futter mehr im Gerät vorhanden ist.Dies kann auch daran liegen, dass ein Home APIs-Projektkontingent überschritten wurde. Weitere Informationen finden Sie unter Kontingentverwaltung. |
SDK_INITIALIZATION_MISSING_INFO |
Das SDK wurde ohne alle erforderlichen Informationen initialisiert.
Dieser Fehler wird beispielsweise ausgegeben, wenn der Client versucht, einen TraitFactory für eine bestimmte Trait-ID abzurufen, der Trait aber bei der Initialisierung des SDK nicht enthalten war. Weitere Informationen findest du unter Zuhause auf Android-Geräten 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. Es ist nicht immer sicher, nicht idempotente Vorgänge zu wiederholen. |
UNIMPLEMENTED |
Der angeforderte Vorgang ist in diesem Dienst nicht implementiert, wird nicht unterstützt oder ist nicht aktiviert. |
UNKNOWN |
Unbekannter Fehler. UNKNOWN wird angezeigt, wenn ein Fehler auftritt, der mit keinem der anderen Fehlercodes klassifiziert werden kann.
Dieser Fehler kann beispielsweise zurückgegeben werden, wenn ein von einer externen API empfangener 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. |