Kotlin 不支援已檢查的例外狀況。這樣一來,您可以選擇只處理可復原的例外狀況,簡化及精簡錯誤處理作業。由於您不必明確處理所有可能的例外狀況,因此程式碼會變得更簡潔,並且更能專注於主要用途。
可復原的失敗是指開發人員可以自行解決的問題。舉例來說,如果在呼叫中使用的 ID 無效,API 就會擲回 HomeException
,並顯示 invalid data
訊息。應用程式開發人員可以選擇從快取中移除該 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 |
作業已遭拒絕,因為系統未處於執行該作業所需的狀態。舉例來說,如果您在已停止運作的烤箱上呼叫 stop ,就可能會收到這則訊息。 |
INTERNAL |
內部錯誤。這表示基礎系統預期的某些不變量已損毀。此錯誤代碼僅在發生嚴重錯誤時使用。 |
INVALID_ARGUMENT |
您提供的引數超出預期的值範圍。 |
NOT_FOUND |
您指定的實體或資源無法找到。例如,在媒體播放器裝置上呼叫
activateAudioTrack 時,指定不存在的曲目 ID。 |
OUT_OF_RANGE |
根據目前的系統狀態,某個參數超出有效範圍。如果值位於 API 呼叫可能接受的值範圍內,但在目前情境中不合理,就會顯示這則訊息。 |
PERMISSION_DENIED |
您的權限不足,無法執行指定作業。請勿將這個錯誤代碼解讀為要求有效。 |
RESOURCE_EXHAUSTED |
部分資源已用盡。舉例來說,如果有人在寵物餵食器裝置上呼叫
dispense ,但裝置中沒有剩餘的食物,就可能會擲回此例外狀況。 |
SDK_INITIALIZATION_MISSING_INFO |
SDK 未完全初始化。舉例來說,如果您嘗試為未註冊的特徵取得 TraitFactory ,就會收到這則訊息。請參閱「初始化」一文。 |
UNAUTHENTICATED |
無法識別來電者,或是要求沒有有效的驗證憑證。 |
UNAVAILABLE |
無法使用服務,這很可能是暫時性的情況,您可以透過使用回退功能重試來修正。請注意,重試非冪等性操作不一定安全。 |
UNIMPLEMENTED |
這項服務未實作、支援或啟用要求的作業。 |
UNKNOWN |
發生不明錯誤,一般來說,如果發生無法使用其他錯誤代碼分類的錯誤狀況,就會顯示 UNKNOWN 。舉例來說,如果從外部 API 收到的狀態值缺乏足夠的根本原因資訊,系統可能會傳回這個錯誤。 |