Kotlin, işaretli istisnaları 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}",
)
}
Home API'lerindeki tüm yöntemler HomeException
istisnası oluşturabilir. Bu nedenle, tüm çağrılarda HomeException
istisnasını yakalamak için try-catch
bloğu kullanmanızı öneririz.
HomeException
işlenirken neyin yanlış gittiğini öğrenmek için code
ve message
alanlarını 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. |
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. |
FAILED_PRECONDITION |
Sistem, işlemin yürütülmesi için gerekli durumda olmadığından işlem reddedildi. Örneğin, OvenCavityOperationalStateTrait komutunun stop komutu zaten durmuş bir fırında çağrılırsa veya dizin olmayan bir öğede rmdir işlemi çalıştırmaya çalışırsanız 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ı. |
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ın (ör. kullanıcı tabanlı erişim kontrolü) isteği reddedilirse 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 'dan farklı olarak 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 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, bu hata, harici bir API'den alınan durum değerinde temel neden hakkında yeterli bilgi olmadığında döndürülebilir. |