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 iptal edildi. Bu durum genellikle sıra kontrolü hatası veya işlem iptal etme gibi bir eşzamanlılık sorunu olduğunda ortaya çıkar. |
ALREADY_EXISTS |
Oluşturmaya çalıştığınız kaynak veya varlık zaten mevcut. Örneğin, termostat için adlandırılmış bir program olabilir. |
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 çağırmaya çalıştığınız API'yi desteklemediğinde yaşanabilir. |
CANCELLED |
İşlem genellikle arayan tarafından iptal edildi. |
DATA_LOSS |
Kurtarılamaz veri kaybı veya bozulması. |
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, zaten durdurulmuş bir fırında stop düğmesine bastığınızda 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 |
Beklenen değer aralığının dışında bir bağımsız değişken sağladınız. |
NOT_FOUND |
Bulunamayan bir öğe veya kaynak belirttiniz. Örneğin, bir medya oynatıcı cihazda
activateAudioTrack çağrısı yapılırken var olmayan bir parça kimliği belirtmek. |
OUT_OF_RANGE |
Mevcut sistem durumuna göre bir parametre geçerli aralığı aştı. Bu mesaj, değer API çağrısının kabul edebileceği değer aralığında olduğu halde mevcut bağlamda anlamlı olmadığında gösterilir. |
PERMISSION_DENIED |
Belirtilen işlemi yürütme izniniz yok. Bu hata kodu, isteğin diğer açılardan geçerli olduğu anlamına gelmez. |
RESOURCE_EXHAUSTED |
Bazı kaynaklar tükendi. Örneğin, bir evcil hayvan mama makinesi cihazında
dispense çağrısı yapıldığında ve cihazda artık mama kalmadığında bu hata meydana gelebilir. |
SDK_INITIALIZATION_MISSING_INFO |
SDK tam olarak başlatılmadı. Örneğin, kaydedilmemiş bir özellik için TraitFactory almaya çalışırsanız bu mesajı alırsınız. 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. Genel olarak 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ğeri temel nedenle ilgili yeterli bilgiyi içermiyorsa bu hata döndürülebilir. |