Kotlin 不支持受检异常。这样可以简化和简化错误处理,因为您可以选择仅处理可能可恢复的异常。由于您无需明确处理所有可能的异常,因此代码会更加简洁,从而更专注于其主要用途。
可恢复的失败是指开发者可以自行解决的问题。例如,如果调用中使用的 ID 无效,API 会抛出包含 invalid data
消息的 HomeException
。然后,应用开发者可以选择从其缓存中移除该 ID,或向用户显示“未找到结构”等消息。
以下示例展示了如何处理可恢复的失败:
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 |
操作被拒绝,因为系统未处于执行该操作所需的状态。例如,如果对已停止的烤箱调用了 OvenCavityOperationalStateTrait 的 stop 命令,或者您尝试对非目录运行 rmdir 操作,则可能会收到此消息。 |
INTERNAL |
内部错误。这意味着底层系统所期望的一些不变量已损坏。此错误代码保留用于严重错误。 |
INVALID_ARGUMENT |
客户端提供的参数超出预期的值范围。 |
NOT_FOUND |
找不到所请求的实体,例如文件或目录。
如果要拒绝整个一类用户的请求(例如,功能逐步发布的用户或未正式加入许可名单的用户),则可以使用 NOT_FOUND 。
如果要拒绝某一类用户中部分用户的请求(例如,基于用户的访问权限控制),则必须使用 PERMISSION_DENIED 。 |
OUT_OF_RANGE |
尝试执行的操作已超出有效范围,例如查找或读取操作已超出 end-of-file 。与 INVALID_ARGUMENT 不同,此错误指示的问题可以通过改变系统状态得到修复。 |
PERMISSION_DENIED |
调用者无权执行指定的操作。如果遭拒的原因是由于部分资源已用尽,则不得使用 PERMISSION_DENIED (请改用 RESOURCE_EXHAUSTED 来表示此类错误)。
如果无法识别调用方,则不得使用 PERMISSION_DENIED (请改用 UNAUTHENTICATED 来表示此类错误)。
此错误代码并不意味着请求有效,或者请求的实体存在或满足其他先决条件。 |
RESOURCE_EXHAUSTED |
部分资源已用尽,可能是由于每用户配额已用尽或整个文件系统的存储空间已用完。
例如,如果对宠物喂食器设备调用 DispenseTrait 的 dispense 命令,但设备中没有剩余食物,则可能会抛出此错误。 |
SDK_INITIALIZATION_MISSING_INFO |
SDK 在初始化时未提供所有必要信息。
例如,如果客户端尝试为给定 trait ID 获取 TraitFactory ,但在初始化 SDK 时未包含该 trait,则会抛出此错误。请参阅在 Android 上初始化住宅。 |
UNAUTHENTICATED |
无法识别调用方,或者请求没有有效的身份验证凭据。 |
UNAVAILABLE |
服务不可用。这很可能是一种暂时情况,可以通过退避重试来纠正。请注意,重试执行非幂等操作并非总是安全的。 |
UNIMPLEMENTED |
请求的操作在此服务中未实现、不受支持或未启用。 |
UNKNOWN |
未知错误。当发生无法使用任何其他错误代码进行分类的错误情况时,系统会显示 UNKNOWN 。
例如,当从外部 API 收到的状态值缺少有关根本原因的足够信息时,便会返回该错误。 |