Котлин не поддерживает проверенные исключения . Это упрощает и оптимизирует обработку ошибок, поскольку вы можете обрабатывать только те исключения, которые потенциально можно восстановить. А поскольку вам не нужно явно обрабатывать каждое возможное исключение, ваш код становится менее загроможденным и, следовательно, остается более сосредоточенным на своей основной цели.
Устранимые сбои — это проблемы, которые разработчик может решить со своей стороны. Например, если идентификатор, используемый в вызове, недействителен, 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
, с которыми вы можете столкнуться:
Код | Значение |
---|---|
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, не содержит достаточной информации об основной причине. |