Kotlin tidak mendukung pengecualian yang diperiksa. Hal ini menyederhanakan dan mengefisienkan penanganan error, karena Anda dapat memilih untuk hanya menangani pengecualian yang berpotensi dapat dipulihkan. Dan karena Anda tidak perlu menangani setiap kemungkinan pengecualian secara eksplisit, kode Anda tidak terlalu berantakan dan akibatnya, tetap lebih fokus pada tujuan utamanya.
Kegagalan yang dapat dipulihkan adalah masalah yang dapat diatasi oleh 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
error.code dan
error.message untuk mengetahui penyebab masalahnya. Mungkin juga ada sub-kode 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 dijalankan. Periksa subkode error untuk mengetahui detail selengkapnya. |
CURSOR_WINDOW_NOT_SUPPORTED |
Metode yang dipanggil menggunakan
CursorWindow, tetapi
CursorWindow tidak diaktifkan atau tidak didukung dalam
konteks saat ini. |
DATA_LOSS |
Data hilang atau rusak yang tidak dapat dipulihkan telah terjadi. |
DEADLINE_EXCEEDED |
Batas waktu berakhir sebelum operasi selesai. Untuk operasi yang mengubah status sistem, error ini mungkin ditampilkan, bahkan jika operasi tersebut telah selesai. |
DECOMMISSIONING_INELIGIBLE |
Pencabutan gagal karena perangkat tidak memenuhi syarat untuk dicabut. |
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 |
Pemegang data tidak valid. |
NOT_FOUND |
Entity yang diminta, seperti file atau direktori, tidak ditemukan.
Jika permintaan ditolak untuk seluruh kelas pengguna, seperti peluncuran fitur bertahap atau daftar yang diizinkan yang tidak terdokumentasi, NOT_FOUND dapat digunakan.
Jika permintaan ditolak pada beberapa pengguna di dalam suatu kelas pengguna, seperti pada kontrol akses basis 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 apabila 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, kemungkinan 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 dispenser makanan hewan peliharaan, tetapi
tidak ada lagi makanan yang tersisa di unit.Hal ini juga dapat disebabkan oleh terlampauinya kuota project Home API. 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 karakteristik tertentu, tetapi karakteristik tersebut tidak
disertakan saat melakukan inisialisasi 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 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 di 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 jika nilai status yang diterima
dari API eksternal tidak memiliki informasi yang memadai
mengenai penyebab utamanya. |
WRITE_FAILED |
Penulisan gagal dijalankan. Periksa subkode error untuk mengetahui detail selengkapnya. |