Kotlin tidak mendukung pengecualian terkontrol. 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 ditangani 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 mempelajari masalah yang terjadi.
Setiap pengecualian yang tidak ditangani akan menyebabkan aplikasi Anda error.
Tabel berikut memberikan arti kode HomeException
yang mungkin Anda
hadapi:
Kode | Arti |
---|---|
ABORTED
| Operasi dibatalkan, biasanya karena masalah konkurensi seperti kegagalan pemeriksaan sequencer 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 offline atau tidak mendukung API yang coba dipanggil klien. |
CANCELLED |
Operasi dibatalkan, biasanya oleh pemanggil. |
DATA_LOSS |
Terjadi kerusakan atau kehilangan data yang tidak dapat dipulihkan. |
DEADLINE_EXCEEDED |
Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah status sistem, error ini mungkin ditampilkan, meskipun operasi tersebut telah selesai. |
FAILED_PRECONDITION |
Operasi tersebut ditolak karena sistem tidak dalam status
yang diperlukan untuk menjalankan operasi. Misalnya, Anda mungkin mendapatkan
pesan ini jika perintah stop dari
OvenCavityOperationalStateTrait dipanggil di
oven yang sudah berhenti, atau jika Anda mencoba menjalankan
operasi rmdir di non-direktori. |
INTERNAL |
Error internal. Artinya, beberapa invarian yang diharapkan oleh sistem pokok telah rusak. Kode error ini disediakan untuk error yang bersifat 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 permintaan ditolak untuk seluruh kelas pengguna, seperti peluncuran fitur secara bertahap atau daftar yang diberi akses, NOT_FOUND dapat digunakan.
Jika permintaan ditolak untuk beberapa pengguna dalam suatu kelas pengguna, seperti kontrol akses berbasis pengguna, PERMISSION_DENIED harus digunakan. |
OUT_OF_RANGE |
Upaya operasi dilakukan melampaui rentang yang valid, seperti mencari 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 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 ditampilkan jika perintah dispense dari DispenseTrait dipanggil di perangkat pemberi makan hewan peliharaan, tetapi tidak ada lagi makanan yang tersisa di unit. |
SDK_INITIALIZATION_MISSING_INFO |
SDK diinisialisasi tanpa semua informasi yang diperlukan.
Misalnya, error ini ditampilkan jika klien mencoba
mendapatkan TraitFactory untuk ID ciri tertentu, tetapi ciri tersebut
tidak disertakan saat menginisialisasi SDK. Lihat
Melakukan inisialisasi rumah di Android. |
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. 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 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. |