Kotlin unterstützt keine geprüften Ausnahmen. Dies vereinfacht und optimiert die Fehlerbehandlung, da Sie nur die Ausnahmen behandeln können, die potenziell wiederhergestellt werden können. Da Sie nicht jede mögliche Ausnahme explizit behandeln müssen, ist Ihr Code weniger überladen und bleibt daher stärker auf seinen Hauptzweck ausgerichtet.
Wiederherstellbare Fehler sind Probleme, die ein Entwickler von seiner Seite aus beheben kann.
Wenn beispielsweise eine in einem Aufruf verwendete ID ungültig ist, gibt die API eine HomeException
mit einer invalid data
-Nachricht zurück. Der App-Entwickler kann diese ID dann entweder aus seinem Cache entfernen oder dem Nutzer eine Meldung wie „Gebäude nicht gefunden“ anzeigen.
Beispiel für den Umgang mit einem wiederherstellbaren Fehler:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
Bei jeder Methode in den Home APIs kann eine HomeException
geworfen werden. Wir empfehlen daher, einen try-catch
-Block zu verwenden, um HomeException
bei allen Aufrufen zu fangen.
Prüfen Sie bei der Verarbeitung von HomeException
die Felder code
und message
, um herauszufinden, was schiefgelaufen ist.
Nicht behandelte Ausnahmen führen zum Absturz Ihrer App.
In der folgenden Tabelle finden Sie die Bedeutungen von HomeException
-Codes, die Ihnen möglicherweise begegnen:
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, die keine Verbindung herstellen konnte. Das 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. |
DATA_LOSS |
Es ist ein nicht behebbarer Datenverlust oder Datenbeschädigung 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. |
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 stop -Befehl der OvenCavityOperationalStateTrait auf einem Ofen aufgerufen wurde, der bereits ausgeschaltet ist, oder wenn Sie versucht haben, einen rmdir -Vorgang auf einem Nicht-Verzeichnis auszuführen. |
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 Kunde hat ein Argument angegeben, das außerhalb des erwarteten Wertebereichs liegt. |
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, 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. 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 ist nicht berechtigt, den angegebenen Vorgang auszuführen. 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 Befehl dispense des DispenseTrait auf einem Futterautomaten aufgerufen wird, aber kein Futter mehr im Gerät vorhanden ist. |
SDK_INITIALIZATION_MISSING_INFO |
Das SDK wurde ohne alle erforderlichen Informationen initialisiert.
Dieser Fehler tritt beispielsweise auf, wenn der Client versucht, eine TraitFactory für eine bestimmte Merkmal-ID abzurufen, das Merkmal aber nicht bei der Initialisierung des SDKs berücksichtigt wurde. Weitere Informationen finden Sie unter Zuhause auf Android-Geräten initialisieren. |
UNAUTHENTICATED |
Der Anrufer kann nicht identifiziert werden oder die Anfrage enthält keine gültigen Anmeldedaten. |
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 eine Fehlerbedingung auftritt, die mit keinem der anderen Fehlercodes klassifiziert werden kann.
Dieser Fehler wird beispielsweise zurückgegeben, wenn ein von einer externen API empfangener Statuswert nicht genügend Informationen zur Ursache enthält. |