Obsługa błędów

Kotlin nie obsługuje wyjątków sprawdzanych. Upraszcza i uproszcza obsługę błędów, ponieważ możesz obsługiwać tylko te wyjątki, które można potencjalnie odzyskać. Ponieważ nie musisz wyraźnie obsługiwać wszystkich możliwych wyjątków, kod jest mniej zatłoczony i w konsekwencji pozostaje bardziej skoncentrowany na swoim głównym celu.

Odwracalne błędy to problemy, które deweloper może rozwiązać po swojej stronie. Jeśli np. identyfikator użyty w wywołaniu jest nieprawidłowy, interfejs API zwraca błąd HomeException z wiadomością invalid data. Deweloper aplikacji może usunąć ten identyfikator z pamięci podręcznej lub wyświetlić użytkownikowi komunikat, np. „Nie znaleziono struktury”.

Przykład sposobu obsługiwania odwracalnych błędów:

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

Każda metoda w interfejsach API Home może wywołać błądHomeException, dlatego zalecamy użycie bloku try-catch, aby przechwytywać błądHomeException we wszystkich wywołaniach.

Podczas obsługi HomeException sprawdź pola codemessage, aby dowiedzieć się, co poszło nie tak.

Każdy nieobsługiwany wyjątek spowoduje awarię aplikacji.

W tabeli poniżej znajdziesz omówienie kodów HomeException, które mogą się pojawić:

Tabela: HomeException kody
Kod Znaczenie
ABORTED Operacja została przerwana. Zwykle pojawia się, gdy występuje problem z współbieżnością, taki jak błąd sprawdzania sekwencji lub przerwanie transakcji.
ALREADY_EXISTS Zasób lub encja, które próbujesz utworzyć, już istnieją. Może to być np. nazwany harmonogram dla termostatu.
API_NOT_CONNECTED Klient próbował wywołać metodę interfejsu API, która nie mogła nawiązać połączenia. Może się tak zdarzyć, gdy urządzenie jest offline lub nie obsługuje interfejsu API, do którego próbujesz się odwołać.
CANCELLED Operacja została anulowana, zwykle przez element wywołujący.
DATA_LOSS Nieodwracalna utrata danych lub ich uszkodzenie.
DEADLINE_EXCEEDED Termin upłynął przed wykonaniem operacji. W przypadku operacji, które zmieniają stan systemu, ten błąd może zostać zwrócony nawet wówczas, gdy operacja zakończyła się pomyślnie.
FAILED_PRECONDITION Operacja została odrzucona, ponieważ system nie znajduje się w stanie wymaganym do jej wykonania. Możesz na przykład otrzymać tę wiadomość, jeśli wywołasz stop w piekarniku, który jest już wyłączony.
INTERNAL Błędy wewnętrzne. Oznacza to, że niektóre niezmienne wartości oczekiwane przez system bazowy zostały naruszone. Ten kod błędu jest zarezerwowany dla poważnych błędów.
INVALID_ARGUMENT Podany argument wykracza poza oczekiwany zakres wartości.
NOT_FOUND Wskazano niewidoczną encję lub zasób. Na przykład podanie nieistniejącego identyfikatora utworu podczas wywoływania funkcji activateAudioTrack na urządzeniu z odtwarzaczem multimediów.
OUT_OF_RANGE parametr przekroczył prawidłowy zakres na podstawie bieżącego stanu systemu; To komunikat, który pojawia się, gdy wartość mieści się w zakresie wartości, które wywołanie interfejsu API może potencjalnie zaakceptować, ale nie ma sensu w obecnym kontekście.
PERMISSION_DENIED Nie masz uprawnień do wykonania określonej operacji. Ten kod błędu nie oznacza, że żądanie jest w ogóle prawidłowe.
RESOURCE_EXHAUSTED Niektóre zasoby zostały wyczerpane. Może się to zdarzyć, gdy ktoś wywoła funkcję dispense na urządzeniu dozownik karmy dla zwierząt, a w urządzeniu nie ma już jedzenia.
SDK_INITIALIZATION_MISSING_INFO Pakiet SDK nie został w pełni zainicjowany. Ten komunikat otrzymasz na przykład, gdy spróbujesz uzyskać TraitFactory dla cechy, która nie została zarejestrowana. Zobacz inicjalizację.
UNAUTHENTICATED nie można zidentyfikować dzwoniącego lub żądanie nie zawiera prawidłowych danych uwierzytelniających.
UNAVAILABLE Usługa jest niedostępna. Jest to prawdopodobnie stan przejściowy, który można skorygować, próbując ponownie z większym odstępem. Pamiętaj, że ponowne wykonywanie operacji nie idempotentnych nie zawsze jest bezpieczne.
UNIMPLEMENTED Żądana operacja nie jest zaimplementowana, obsługiwana ani włączona w tej usłudze.
UNKNOWN Nieznany błąd. Ogólnie rzecz biorąc, kod błędu UNKNOWNwyświetla się, gdy wystąpi błąd, którego nie można zaklasyfikować za pomocą żadnego z innych kodów błędów. Ten błąd może zostać zwrócony na przykład wtedy, gdy wartość stanu otrzymana z zewnętrznego interfejsu API nie zawiera wystarczających informacji o przyczynie błędu.