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 code
i message
, 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ć:
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 UNKNOWN wystę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. |