Kotlin, kontrol edilen istisnaları desteklemez. Yalnızca kurtarılabilir olan istisnaları ele almayı seçebileceğiniz için bu, hata işleme sürecini basitleştirir ve kolaylaştırır. Ayrıca, olası her istisnayı açıkça ele almanız gerekmediğinden kodunuz daha az dağınık olur ve dolayısıyla birincil amacına daha fazla odaklanır.
Kurtarılabilecek 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ı içeren bir HomeException
oluşturur. Uygulama geliştirici, bu kimliği önbelleğinden kaldırabilir veya kullanıcıya "Yapı bulunamadı" gibi bir mesaj gösterebilir.
Kurtarılabilecek bir hatayı nasıl ele alacağınıza dair bir ö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
oluşturabileceğinden, tüm çağrılarda HomeException
yakalamak için bir try-catch
bloğu kullanmanızı öneririz.
HomeException
ile çalışırken 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 sıralayıcı kontrolü hatası veya işlem iptal etme gibi bir eşzamanlılık sorunu nedeniyle iptal edildi. |
ALREADY_EXISTS |
Bir istemcinin oluşturmaya çalıştığı varlık (ör. dosya veya dizin) zaten mevcut. |
API_NOT_CONNECTED |
İstemci, bağlantısı başarısız olan bir API'den bir yöntem ç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 bozulma meydana geldi. |
DEADLINE_EXCEEDED |
İşlem tamamlanmadan son tarih doldu. 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 gereken durumda olmadığından işlem reddedildi. Örneğin, OvenCavityOperationalStateTrait stop komutu zaten durdurulmuş bir fırında çağrılırsa veya dizin olmayan bir yerde rmdir işlemi çalıştırmaya çalıştıysanız bu mesajı alabilirsiniz. |
INTERNAL |
Dahili hatalar. Bu, temel sistem tarafından beklenen 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, kullanıcı sınıfının tamamı için reddedilirse (ör. kademeli özellik kullanıma sunma veya belgelenmemiş izin verilenler listesi) NOT_FOUND kullanılabilir.
Kullanıcı sınıfındaki bazı kullanıcılar için istek reddedilirse (ör. kullanıcı tabanlı erişim denetimi) PERMISSION_DENIED kullanılmalıdır. |
OUT_OF_RANGE |
İşlem, geçerli aralığın dışında (ör. end-of-file 'ten sonra arama veya okuma) yapılmaya çalışıldı. INVALID_ARGUMENT 'ün aksine bu hata, sistem durumu değişirse 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 reddetmeler için kullanılmamalıdır (bu hatalar için RESOURCE_EXHAUSTED değerini kullanın).
Arayan tanımlanamıyorsa PERMISSION_DENIED kullanılmamalıdır (bu hatalar için UNAUTHENTICATED kullanın).
Bu hata kodu, isteğin geçerli olduğu veya istenen öğenin var olduğu ya da diğer ön koşulları karşıladığı anlamına gelmez. |
RESOURCE_EXHAUSTED |
Kullanıcı başına kotaya ulaşılması veya dosya sisteminin tamamının alanı dolması nedeniyle bazı kaynaklar tükenmiş olabilir.
Örneğin, bir evcil hayvan besleyici cihazda DispenseTrait cihazının dispense komutu çağrılırsa ancak cihazda artık yiyecek kalmamışsa bu hata oluşabilir. |
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ışırsa ancak özellik SDK'nın başlatılması sırasında dahil edilmediyse bu hata meydana gelir. Android'de evi başlatma başlıklı makaleyi inceleyin. |
UNAUTHENTICATED |
Arayan tanımlanamıyor veya istekte geçerli kimlik doğrulama bilgileri bulunmuyor. |
UNAVAILABLE |
Hizmet kullanılamıyor. Bu durum büyük olasılıkla geçicidir ve geri çekilmeyle yeniden deneyerek düzeltilebilir. Kimlik doğrulaması olmayan işlemlerin her zaman yeniden denenmesinin 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örünür.
Örneğin, harici bir API'den alınan durum değerinde temel nedenle ilgili yeterli bilgi yoksa bu hata döndürülebilir. |