Kotlin tidak mendukung pengecualian yang diperiksa. Hal ini menyederhanakan dan mengefisienkan penanganan error, karena Anda dapat memilih untuk menangani hanya pengecualian yang berpotensi dapat dipulihkan. Selain itu, karena Anda tidak perlu menangani setiap kemungkinan pengecualian secara eksplisit, kode Anda menjadi lebih rapi dan karenanya, 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 mereka atau menampilkan pesan seperti "Structure not found" 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}",
)
}
Metode apa pun di Home API dapat menampilkan
HomeException, jadi sebaiknya gunakan blok try-catch untuk
menangkap HomeException pada semua panggilan.
Saat menangani HomeException, periksa kolom
error.code dan
error.message untuk mempelajari penyebab masalah. Mungkin ada juga kode sub-error, jadi panggil metode
getSubErrorCodes() dan periksa hasilnya.
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, umumnya 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 jika perangkat sedang offline atau tidak mendukung API yang coba dipanggil oleh klien. |
CANCELLED |
Operasi dibatalkan, biasanya oleh pemanggil. |
COMMAND_FAILED |
Perintah gagal dieksekusi. Periksa kode sub-error untuk mengetahui detail selengkapnya. |
CURSOR_WINDOW_NOT_SUPPORTED |
Metode yang menggunakan
CursorWindow dipanggil, tetapi
CursorWindow tidak diaktifkan atau tidak didukung dalam
konteks saat ini. |
DATA_LOSS |
Terjadi kehilangan atau kerusakan data yang tidak dapat dipulihkan. |
DEADLINE_EXCEEDED |
Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah keadaan sistem, error ini mungkin ditampilkan bahkan jika operasi tersebut telah selesai. |
DECOMMISSIONING_INELIGIBLE |
Penonaktifan gagal karena perangkat tidak memenuhi syarat untuk penonaktifan. |
FAILED_PRECONDITION |
Operasi tersebut ditolak karena sistem tidak dalam keadaan
dibutuhkan untuk menjalankan operasi. Misalnya, Anda mungkin mendapatkan
pesan ini jika perintah stop dari OvenCavityOperationalStateTrait dipanggil pada
oven yang sudah berhenti. |
INTERNAL |
Error internal. Artinya beberapa invarian yang diperlukan 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. |
INVALID_DATA_HOLDER |
Penampung data tidak valid. |
NOT_FOUND |
Entitas yang diminta, seperti file atau direktori, tidak ditemukan.
Jika permintaan ditolak pada seluruh kelas pengguna, seperti peluncuran bertahap
atau daftar yang diberi akses, NOT_FOUND
dapat digunakan.
Jika permintaan ditolak pada beberapa pengguna di dalam suatu kelas pengguna,
seperti pada kontrol akses basis pengguna, 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 mungkin 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 apabila pemanggil tidak dapat di
identifikasi (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, kemungkinan karena kuota per pengguna
tercapai atau seluruh sistem file kehabisan ruang.
Misalnya, error ini dapat ditampilkan jika perintah
dispense dari
DispenseTrait dipanggil pada perangkat pet-feeder, tetapi tidak ada lagi makanan yang tersisa di unit.Hal ini mungkin juga disebabkan oleh kuota project Home API yang terlampaui. Untuk mengetahui informasi selengkapnya, lihat Pengelolaan kuota. |
SDK_INITIALIZATION_MISSING_INFO |
SDK diinisialisasi tanpa semua informasi yang diperlukan.
Misalnya, error ini ditampilkan jika klien mencoba mendapatkan TraitFactory untuk ID trait tertentu, tetapi trait tersebut tidak disertakan saat menginisialisasi SDK. Lihat
Menginisialisasi smart home 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. 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. 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 cukup
mengenai penyebab utamanya. |
WRITE_FAILED |
Penulisan gagal dieksekusi. Periksa kode sub-error untuk mengetahui detail selengkapnya. |