エラー処理

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 コードの意味を示します。

表: 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 から受信したステータス値に根本原因に関する十分な情報がない場合に、このエラーが返されることがあります。