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:
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. |