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 |
システムがオペレーションの実行に必要な状態ではないため、オペレーションが拒否されました。たとえば、すでに停止しているオーブンで 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 から受信したステータス値に根本原因に関する十分な情報がない場合に、このエラーが返されることがあります。 |