Obsługa błędów na Androidzie

Kotlin nie obsługuje wyjątków sprawdzanych. Dzięki temu uprościsz i usprawnisz 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, Twój 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 na przykład identyfikator użyty w wywołaniu jest nieprawidłowy, interfejs API zwróci 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 do przechwytywania błęduHomeException 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 oznaczenia HomeException, które mogą się pojawić:

Tabela: HomeException kody
Kod Znaczenie
ABORTED Operacja została przerwana. Ten komunikat pojawia się zazwyczaj w przypadku problemu równoczesności, takiego jak nieudana kontrola 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ę dostać.
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. Ten komunikat może się wyświetlić, jeśli wywołasz metodę stop w piekarniku, który jest już wyłączony.
INTERNAL Błędy wewnętrzne. Oznacza to, że pewne niezmienniki oczekiwane przez system bazowy zostały uszkodzone. Ten kod błędu jest zarezerwowany dla poważnych błędów.
INVALID_ARGUMENT Podany przez Ciebie 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 inny sposób prawidłowe.
RESOURCE_EXHAUSTED Niektóre zasoby zostały wyczerpane. Może się to zdarzyć, gdy ktoś wywoła funkcję dispense na urządzeniu do karmienia zwierząt, a w urządzeniu nie ma już jedzenia.
SDK_INITIALIZATION_MISSING_INFO Pakiet SDK nie został w pełni zainicjowany. Ten komunikat zobaczysz na przykład, gdy spróbujesz uzyskać wartość TraitFactory dla cechy, która nie została zarejestrowana. Zapoznaj się z artykułem Inicjowanie domu na urządzeniu z Androidem.
UNAUTHENTICATED nie można zidentyfikować dzwoniącego lub żądanie nie zawiera prawidłowych danych uwierzytelniających.
UNAVAILABLE Usługa jest niedostępna. Jest to najczęściej stan przejściowy, który można rozwiązać, ponawiając próbę z większym odstępem. Pamiętaj, że ponowne próby wykonywania operacji nie idempotentnych nie zawsze są bezpieczne.
UNIMPLEMENTED Żądana operacja nie jest wdrożona, obsługiwana ani włączona w tej usłudze.
UNKNOWN Nieznany błąd. Ogólnie rzecz ujmując, błąd UNKNOWNwystępuje, gdy wystąpi warunek błędu, 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, gdy wartość stanu otrzymana z zewnętrznego interfejsu API nie zawiera wystarczających informacji o przyczynie błędu.