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 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 omówienie kodów HomeException
, które mogą się pojawić:
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 UNKNOWN wyś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. |