Kotlin, checked exceptions'ı desteklemez. Yalnızca kurtarılabilir istisnaları işlemeyi seçebileceğiniz için bu, hata işlemeyi basitleştirir ve kolaylaştırır. Ayrıca, olası her istisnayı açıkça ele almanız gerekmediğinden kodunuz daha az karmaşık olur ve dolayısıyla asıl amacına daha fazla odaklanır.
Kurtarılabilir hatalar, geliştiricinin kendi tarafında çözebileceği sorunlardır.
Örneğin, bir çağrıda kullanılan kimlik geçerli değilse API, invalid data
mesajıyla birlikte HomeException
oluşturur. Uygulama geliştirici daha sonra bu kimliği önbelleğinden kaldırmayı veya kullanıcıya "Yapı bulunamadı" gibi bir mesaj göstermeyi seçebilir.
Kurtarılabilir bir hatanın nasıl ele alınabileceğine dair örnek:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
Ev API'lerindeki herhangi bir yöntem
HomeException
oluşturabilir. Bu nedenle, tüm çağrılarda HomeException
'i yakalamak için try-catch
bloğunu kullanmanızı öneririz.
HomeException
ile ilgili işlem yaparken neyin yanlış gittiğini öğrenmek için
error.code
ve
error.message
alanlarını kontrol edin. Alt hata kodları da olabilir. Bu nedenle,
getSubErrorCodes()
yöntemini çağırın ve sonucu kontrol edin.
İşlenmemiş istisnalar, uygulamanızın kilitlenmesine neden olur.
Aşağıdaki tabloda, karşılaşabileceğiniz HomeException
kodlarının anlamları verilmiştir:
Kod | Anlamı |
---|---|
ABORTED |
İşlem, genellikle eşzamanlılık sorunu (ör. sıralayıcı kontrolü hatası veya işlem iptali) nedeniyle iptal edildi. |
ALREADY_EXISTS |
Bir istemcinin oluşturmaya çalıştığı varlık (ör. dosya veya dizin) zaten mevcut. |
API_NOT_CONNECTED |
İstemci, bağlanamayan bir API'den bir yöntemi çağırmaya çalıştı. Bu durum, cihaz çevrimdışı olduğunda veya istemcinin çağırmaya çalıştığı API'yi desteklemediğinde yaşanabilir. |
CANCELLED |
İşlem, genellikle arayan tarafından iptal edildi. |
COMMAND_FAILED |
Komut yürütülemedi. Daha fazla ayrıntı için alt hata kodlarını kontrol edin. |
CURSOR_WINDOW_NOT_SUPPORTED |
CursorWindow kullanan bir yöntem çağrıldı ancak CursorWindow etkinleştirilmedi veya mevcut bağlamda desteklenmiyor. |
DATA_LOSS |
Kurtarılamaz veri kaybı veya bozulması meydana gelmişse |
DEADLINE_EXCEEDED |
İşlem tamamlanmadan son tarih geçti. Sistemin durumunu değiştiren işlemler için, işlem başarıyla tamamlanmış olsa bile bu hata döndürülebilir. |
DECOMMISSIONING_INELIGIBLE |
Cihaz devre dışı bırakmaya uygun olmadığından devre dışı bırakma işlemi başarısız oldu. |
FAILED_PRECONDITION |
Sistem, işlemin yürütülmesi için gerekli durumda olmadığından işlem reddedildi. Örneğin, stop komutu OvenCavityOperationalStateTrait durdurulmuş bir fırında çağrılırsa bu mesajı alabilirsiniz. |
INTERNAL |
Dahili hatalar. Bu, temel sistemin beklediği bazı değişmezlerin bozulduğu anlamına gelir. Bu hata kodu ciddi hatalar için ayrılmıştır. |
INVALID_ARGUMENT |
İstemci, beklenen değer aralığının dışında bir bağımsız değişken sağladı. |
INVALID_DATA_HOLDER |
Veri sahibi geçersiz. |
NOT_FOUND |
Dosya veya dizin gibi istenen bir öğe bulunamadı.
Bir istek, kademeli özellik kullanıma sunma veya belgelenmemiş izin verilenler listesi gibi bir kullanıcı sınıfının tamamı için reddedilirse NOT_FOUND kullanılabilir.
Bir kullanıcı sınıfındaki bazı kullanıcılar için istek reddedilirse (ör. kullanıcı tabanlı erişim kontrolü), PERMISSION_DENIED kullanılmalıdır. |
OUT_OF_RANGE |
İşlem, geçerli aralığın dışında denenmiştir. Örneğin, end-of-file 'nın ötesinde arama veya okuma yapılmıştır. INVALID_ARGUMENT hatasının aksine bu hata, sistem durumu değiştiğinde düzeltilebilecek bir sorunu gösterir. |
PERMISSION_DENIED |
Arayan kullanıcının belirtilen işlemi gerçekleştirme izni yok. PERMISSION_DENIED , bazı kaynakların tükenmesinden kaynaklanan retler için kullanılmamalıdır (bu tür hatalar için RESOURCE_EXHAUSTED kullanılmalıdır).
Arayan tanımlanamıyorsa PERMISSION_DENIED kullanılmamalıdır (bu tür hatalar için UNAUTHENTICATED kullanılmalıdır).
Bu hata kodu, isteğin geçerli olduğunu veya istenen öğenin mevcut olduğunu ya da diğer ön koşulları karşıladığını göstermez. |
RESOURCE_EXHAUSTED |
Kullanıcı başına kota sınırına ulaşılması veya dosya sisteminin tamamında alan kalmaması gibi nedenlerle bazı kaynaklar tükenmiş olabilir.
Örneğin, dispense komutu bir evcil hayvan besleme cihazında çağrılırsa ancak birimde daha fazla yiyecek kalmamışsa bu hata verilebilir.DispenseTrait |
SDK_INITIALIZATION_MISSING_INFO |
SDK, gerekli tüm bilgiler olmadan başlatıldı.
Örneğin, istemci belirli bir özellik kimliği için TraitFactory almaya çalıştığında ancak özellik SDK başlatılırken dahil edilmediğinde bu hata verilir. Android'de evi başlatma başlıklı makaleyi inceleyin. |
UNAUTHENTICATED |
Arayan tanımlanamıyor veya istekte geçerli kimlik doğrulama bilgileri yok. |
UNAVAILABLE |
Hizmet kullanılamıyor. Bu durum büyük olasılıkla geçicidir ve geri çekilme ile yeniden denenerek düzeltilebilir. İdempotent olmayan işlemleri yeniden denemenin her zaman güvenli olmadığını unutmayın. |
UNIMPLEMENTED |
İstenen işlem bu hizmette uygulanmıyor, desteklenmiyor veya etkinleştirilmiyor. |
UNKNOWN |
Bilinmeyen hata. UNKNOWN , diğer hata kodlarından hiçbiri kullanılarak sınıflandırılamayan bir hata durumu oluştuğunda gösterilir.
Örneğin, harici bir API'den alınan durum değerinde temel neden hakkında yeterli bilgi olmadığında bu hata döndürülebilir. |
WRITE_FAILED |
Yazma işlemi yürütülemedi. Daha fazla ayrıntı için alt hata kodlarını kontrol edin. |