Обработка ошибок

Котлин не поддерживает проверенные исключения . Это упрощает и оптимизирует обработку ошибок, поскольку вы можете обрабатывать только те исключения, которые потенциально можно восстановить. А поскольку вам не нужно явно обрабатывать каждое возможное исключение, ваш код становится менее загроможденным и, следовательно, остается более сосредоточенным на своей основной цели.

Устранимые сбои — это проблемы, которые разработчик может решить со своей стороны. Например, если идентификатор, используемый в вызове, недействителен, API выдает HomeException с invalid data . Затем разработчик приложения может либо удалить этот идентификатор из своего кэша, либо показать пользователю сообщение типа «Структура не найдена».

Пример того, как можно справиться с устранимым сбоем:

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

Любой метод в Home API может вызвать HomeException , поэтому мы рекомендуем использовать блок try-catch для перехвата HomeException при всех вызовах.

При обработке HomeException проверьте его code и поля message , чтобы узнать, что пошло не так.

Любые необработанные исключения приведут к сбою вашего приложения.

В следующей таблице приведены значения кодов HomeException , с которыми вы можете столкнуться:

Таблица: Коды HomeException
Код Значение
ABORTED Операция была прервана. Обычно это происходит при возникновении проблемы параллелизма, например при сбое проверки последовательности или прерывании транзакции.
ALREADY_EXISTS Ресурс или сущность, которую вы пытаетесь создать, уже существует. Это может быть, например, именованное расписание для термостата.
API_NOT_CONNECTED Клиент попытался вызвать метод из API, но не удалось подключиться. Это может произойти, если устройство не в сети или не поддерживает API, который вы пытаетесь вызвать.
CANCELLED Операция была отменена, как правило, вызывающей стороной.
DATA_LOSS Невосстановимая потеря или повреждение данных.
DEADLINE_EXCEEDED Срок истек до завершения операции. Для операций, изменяющих состояние системы, эта ошибка может возвращаться, даже если операция завершилась успешно.
FAILED_PRECONDITION Операция отклонена, поскольку система не находится в состоянии, необходимом для выполнения операции. Например, вы можете получить это сообщение, если вы вызвали stop для уже остановленной духовки.
INTERNAL Внутренние ошибки. Это означает, что некоторые инварианты, ожидаемые базовой системой, были нарушены. Этот код ошибки зарезервирован для серьезных ошибок.
INVALID_ARGUMENT Вы предоставили аргумент, который находится за пределами ожидаемого диапазона значений.
NOT_FOUND Вы указали сущность или ресурс, который невозможно найти. Например, указание несуществующего идентификатора дорожки при вызове activateAudioTrack на устройстве медиаплеера.
OUT_OF_RANGE Параметр превысил допустимый диапазон, основанный на текущем состоянии системы. Это сообщение появляется, когда значение находится в диапазоне значений, которые потенциально может принять вызов API, но не имеет смысла в данном контексте.
PERMISSION_DENIED У вас нет разрешения на выполнение указанной операции. Этот код ошибки не следует интерпретировать как означающий, что в противном случае запрос действителен.
RESOURCE_EXHAUSTED Какой-то ресурс исчерпан. Например, это может быть вызвано, когда кто-то dispense устройство для кормления домашних животных, а в устройстве больше не осталось еды.
SDK_INITIALIZATION_MISSING_INFO SDK не был полностью инициализирован. Например, вы получите это сообщение, если попытаетесь получить TraitFactory для незарегистрированного признака. См. Инициализация .
UNAUTHENTICATED Вызывающий абонент не может быть идентифицирован, или запрос не имеет действительных учетных данных для аутентификации.
UNAVAILABLE Услуга недоступна. Скорее всего, это временное состояние, которое можно исправить, повторив попытку с отсрочкой. Обратите внимание, что не всегда безопасно повторять неидемпотентные операции.
UNIMPLEMENTED Запрошенная операция не реализована, не поддерживается и не включена в этой службе.
UNKNOWN Неизвестная ошибка. Вообще говоря, UNKNOWN появляется, когда возникает ошибка, которую нельзя классифицировать с помощью любого другого кода ошибки. Например, эта ошибка может быть возвращена, когда значение статуса, полученное от внешнего API, не содержит достаточной информации об основной причине.