Fehlerbehandlung unter Android

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, wirft die API eine HomeException mit einer invalid data-Nachricht aus. 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 findest du die Bedeutungen von HomeException-Codes, die dir möglicherweise begegnen:

Tabelle: HomeException codes
Code Bedeutung
ABORTED Der Vorgang wurde abgebrochen. Dieser Fehler tritt in der Regel auf, wenn ein Parallelitätsproblem vorliegt, z. B. ein fehlgeschlagener Sequencer-Check oder eine abgebrochene Transaktion.
ALREADY_EXISTS Die Ressource oder Entität, die Sie erstellen möchten, ist bereits vorhanden. Dies kann beispielsweise ein benanntes Programm für einen Thermostat sein.
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 Sie aufrufen möchten, nicht unterstützt.
CANCELLED Der Vorgang wurde abgebrochen, üblicherweise vom Aufrufer.
DATA_LOSS Dauerhafter Datenverlust oder Datenkorruption.
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 Sie stop für einen Ofen aufgerufen haben, der bereits ausgeschaltet 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 Sie haben ein Argument angegeben, das außerhalb des erwarteten Wertebereichs liegt.
NOT_FOUND Sie haben eine Entität oder Ressource angegeben, die nicht gefunden werden kann. Beispiel: Wenn du beim Aufrufen von activateAudioTrack auf einem Mediaplayer-Gerät eine nicht vorhandene Titel-ID angibst.
OUT_OF_RANGE Ein Parameter hat den gültigen Bereich überschritten, basierend auf dem aktuellen Systemstatus. Diese Meldung wird angezeigt, wenn der Wert zwar im Bereich der Werte liegt, die der API-Aufruf möglicherweise akzeptieren könnte, aber im vorliegenden Kontext keinen Sinn ergibt.
PERMISSION_DENIED Sie sind nicht berechtigt, den angegebenen Vorgang auszuführen. Dieser Fehlercode bedeutet nicht, dass die Anfrage ansonsten gültig ist.
RESOURCE_EXHAUSTED Eine Ressource ist aufgebraucht. Dies kann beispielsweise vorkommen, wenn jemand dispense auf einen Futterautomaten für Haustiere sendet und kein Futter mehr im Gerät vorhanden ist.
SDK_INITIALIZATION_MISSING_INFO Das SDK wurde nicht vollständig initialisiert. Diese Meldung wird beispielsweise angezeigt, wenn Sie versuchen, eine TraitFactory für ein Merkmal abzurufen, das nicht registriert 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 in der Regel angezeigt, wenn eine Fehlerbedingung auftritt, die mit keinem der anderen Fehlercodes klassifiziert werden kann. Dieser Fehler wird beispielsweise zurückgegeben, wenn ein Statuswert von einer externen API empfangen wird, der nicht genügend Informationen zur Ursache enthält.