Kotlin tidak mendukung pengecualian yang diperiksa. Hal ini menyederhanakan dan memperlancar penanganan error, karena Anda dapat memilih untuk menangani hanya pengecualian yang berpotensi dapat dipulihkan. Dan karena Anda tidak perlu menangani setiap kemungkinan pengecualian secara eksplisit, kode Anda menjadi lebih rapi dan akibatnya, tetap lebih berfokus pada tujuan utamanya.
Kegagalan yang dapat dipulihkan adalah masalah yang dapat ditangani developer dari sisi mereka.
Misalnya, jika ID yang digunakan dalam panggilan tidak valid, API akan menampilkan
HomeException
dengan pesan invalid data
. Kemudian, developer aplikasi dapat memilih untuk menghapus ID tersebut dari cache-nya atau menampilkan pesan kepada pengguna seperti "Struktur tidak ditemukan".
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 memunculkan
HomeException
, jadi sebaiknya gunakan blok try-catch
untuk menangkap
HomeException
pada semua panggilan.
Saat menangani HomeException
, periksa kolom code
dan message
untuk mengetahui apa yang salah.
Setiap pengecualian yang tidak ditangani akan menyebabkan aplikasi Anda error.
Tabel berikut memberikan arti kode HomeException
yang mungkin Anda temui:
Kode | Arti |
---|---|
ABORTED
| Operasi dibatalkan, biasanya karena masalah konkurensi seperti kegagalan pemeriksaan pengurut atau pembatalan transaksi. |
ALREADY_EXISTS |
Entitas yang coba dibuat oleh klien, misalnya file atau direktori, sudah ada. |
API_NOT_CONNECTED |
Klien mencoba memanggil metode dari API yang gagal terhubung. Hal ini dapat terjadi saat perangkat sedang offline atau tidak mendukung API yang coba dipanggil klien. |
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 mungkin ditampilkan meskipun operasi telah berhasil diselesaikan. |
FAILED_PRECONDITION |
Operasi tersebut ditolak karena sistem tidak dalam keadaan
yang diperlukan untuk menjalankan operasi. Misalnya, Anda mungkin mendapatkan
pesan ini jika perintah stop dari
OvenCavityOperationalStateTrait dipanggil pada
oven yang sudah berhenti, atau jika Anda mencoba menjalankan
operasi rmdir pada non-direktori. |
INTERNAL |
Error internal. Artinya, beberapa invarian yang diperlukan oleh sistem pokok telah rusak. Kode error ini disediakan untuk error serius. |
INVALID_ARGUMENT |
Klien memberikan argumen yang berada di luar rentang nilai yang diharapkan. |
NOT_FOUND |
Entitas yang diminta, seperti file atau direktori, tidak ditemukan.
Jika suatu permintaan ditolak pada seluruh kelas pengguna, seperti peluncuran
fitur bertahap atau daftar yang diberi akses yang tidak didokumentasikan, NOT_FOUND
dapat digunakan.
Jika permintaan ditolak pada beberapa pengguna di dalam suatu kelas pengguna, seperti pada kontrol akses berbasis pengguna, maka, PERMISSION_DENIED harus digunakan. |
OUT_OF_RANGE |
Upaya operasi dilakukan melampaui rentang yang valid, seperti mencari tahu atau
membaca melampaui end-of-file . Tidak seperti
INVALID_ARGUMENT , error ini
menunjukkan masalah yang dapat diperbaiki jika status sistem berubah. |
PERMISSION_DENIED |
Pemanggil tidak memiliki izin untuk menjalankan operasi yang ditentukan. PERMISSION_DENIED tidak boleh digunakan untuk
penolakan yang disebabkan
oleh kehabisan beberapa resource (gunakan RESOURCE_EXHAUSTED
untuk error tersebut).
PERMISSION_DENIED tidak boleh digunakan jika pemanggil tidak dapat
diidentifikasi (gunakan UNAUTHENTICATED untuk error tersebut).
Kode error ini tidak menyatakan bahwa suatu permintaan valid atau bahwa
entitas yang diminta ada atau memenuhi prakondisi lainnya. |
RESOURCE_EXHAUSTED |
Beberapa resource telah habis, mungkin karena kuota per pengguna telah tercapai atau seluruh sistem file kehabisan ruang.
Misalnya, error ini dapat terjadi jika perintah
dispense dari
DispenseTrait dipanggil di perangkat pengumpan hewan peliharaan, tetapi tidak
ada lagi makanan di unit. |
SDK_INITIALIZATION_MISSING_INFO |
SDK diinisialisasi tanpa semua informasi yang diperlukan.
Misalnya, error ini ditampilkan jika klien mencoba
mendapatkan TraitFactory untuk ID karakteristik tertentu, tetapi karakteristik tersebut
tidak disertakan saat menginisialisasi SDK. Lihat
Menginisialisasi rumah di Android. |
UNAUTHENTICATED |
Pemanggil tidak dapat diidentifikasi atau permintaan tidak memiliki kredensial autentikasi yang valid. |
UNAVAILABLE |
Layanan tidak tersedia. Kemungkinan besar ini hanya kondisi sementara, yang dapat diperbaiki dengan mencoba kembali menggunakan backoff. Perhatikan 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. UNKNOWN muncul saat kondisi error
terjadi 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
mengenai penyebab utamanya. |