Penanganan error

Kotlin tidak mendukung pengecualian yang diperiksa. Hal ini menyederhanakan dan menyederhanakan penanganan error, karena Anda dapat memilih untuk hanya menangani pengecualian yang berpotensi dapat dipulihkan. Selain itu, karena Anda tidak perlu menangani setiap kemungkinan pengecualian secara eksplisit, kode Anda akan lebih rapi dan akibatnya, tetap lebih berfokus pada tujuan utamanya.

Kegagalan yang dapat dipulihkan adalah masalah yang dapat diatasi developer dari sisi mereka. Misalnya, jika ID yang digunakan dalam panggilan tidak valid, API akan menampilkan HomeException dengan pesan invalid data. Developer aplikasi kemudian dapat memilih untuk menghapus ID tersebut dari cache atau menampilkan pesan seperti "Struktur tidak ditemukan" kepada pengguna.

Contoh cara menangani kegagalan yang dapat dipulihkan:

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

Setiap metode di Home API dapat menampilkan HomeException, jadi sebaiknya gunakan blok try-catch untuk menangkap HomeException di semua panggilan.

Saat menangani HomeException, periksa kolom code dan message untuk mengetahui masalahnya.

Setiap pengecualian yang tidak ditangani akan menyebabkan aplikasi Anda error.

Tabel berikut memberikan arti kode HomeException yang mungkin Anda temui:

Tabel: kode HomeException
Kode Arti
ABORTED Operasi dibatalkan. Hal ini biasanya muncul saat ada masalah konkurensi seperti kegagalan pemeriksaan urutan atau pembatalan transaksi.
ALREADY_EXISTS Resource atau entitas yang Anda coba buat sudah ada. Misalnya, ini dapat berupa jadwal bernama untuk termostat.
API_NOT_CONNECTED Klien mencoba memanggil metode dari API yang gagal terhubung. Hal ini dapat terjadi saat perangkat offline atau tidak mendukung API yang Anda coba panggil.
CANCELLED Operasi dibatalkan, biasanya oleh pemanggil.
DATA_LOSS Data hilang atau rusak yang tidak dapat dipulihkan.
DEADLINE_EXCEEDED Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah status sistem, error ini dapat ditampilkan meskipun operasi telah berhasil diselesaikan.
FAILED_PRECONDITION Operasi ditolak karena sistem tidak dalam status yang diperlukan untuk eksekusi operasi. Misalnya, Anda mungkin mendapatkan pesan ini jika memanggil stop pada oven yang sudah berhenti.
INTERNAL Error internal. Artinya, beberapa invarian yang diharapkan oleh sistem yang mendasarinya telah rusak. Kode error ini disediakan untuk error yang bersifat serius.
INVALID_ARGUMENT Anda memberikan argumen yang berada di luar rentang nilai yang diharapkan.
NOT_FOUND Anda menentukan entitas atau resource yang tidak dapat ditemukan. Misalnya, menentukan ID trek yang tidak ada saat memanggil activateAudioTrack di perangkat pemutar media.
OUT_OF_RANGE Parameter melebihi rentang yang valid, berdasarkan status sistem saat ini. Pesan ini muncul saat nilai berada dalam rentang nilai yang berpotensi diterima panggilan API, tetapi tidak masuk akal dalam konteks saat ini.
PERMISSION_DENIED Anda tidak memiliki izin untuk menjalankan operasi yang ditentukan. Kode error ini tidak boleh ditafsirkan sebagai berarti bahwa permintaan valid.
RESOURCE_EXHAUSTED Beberapa resource telah habis. Misalnya, error ini dapat ditampilkan saat seseorang memanggil dispense di perangkat pemberi makan hewan peliharaan dan tidak ada lagi makanan yang tersisa di unit.
SDK_INITIALIZATION_MISSING_INFO SDK tidak diinisialisasi sepenuhnya. Misalnya, Anda akan mendapatkan pesan ini jika mencoba mendapatkan TraitFactory untuk sifat yang tidak terdaftar. Lihat Inisialisasi.
UNAUTHENTICATED Pemanggil tidak dapat diidentifikasi atau permintaan tidak memiliki kredensial autentikasi yang valid.
UNAVAILABLE Layanan tidak tersedia. Kemungkinan besar ini adalah kondisi sementara, yang dapat diperbaiki dengan mencoba kembali menggunakan backoff. Perlu diketahui bahwa mencoba kembali operasi non-idempoten tidak selalu aman.
UNIMPLEMENTED Operasi yang diminta tidak diterapkan, didukung, atau diaktifkan dalam layanan ini.
UNKNOWN Error tidak diketahui. Secara umum, UNKNOWN muncul saat terjadi kondisi error yang tidak dapat diklasifikasikan menggunakan kode error lainnya. Misalnya, error ini dapat ditampilkan saat nilai status yang diterima dari API eksternal tidak memiliki informasi yang memadai tentang akar masalahnya.