Hata işleme

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:

Tablo: HomeException kodları
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 öğe zaten mevcut. Örneğin, termostat için adlandırılmış bir program olabilir.
API_NOT_CONNECTED İstemci, bağlantı kuramayan bir API'den bir yöntem çağırmaya çalıştı. Bu durum, cihaz internete bağlı olmadığında veya çağırmaya çalıştığınız API'yi desteklemediğinde ortaya çıkabilir.
CANCELLED İşlem genellikle arayan tarafından iptal edildi.
DATA_LOSS Kurtarılamaz veri kaybı veya bozulma.
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, stop düğmesine basarak zaten durdurulmuş bir fırını çalıştırmaya çalışırsanı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 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 belirtilmesi.
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ğunda ancak 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 şeklinde yorumlanmamalıdır.
RESOURCE_EXHAUSTED Bazı kaynaklar tükendi. Örneğin, 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. İlk kullanıma hazırlama bölümünü inceleyin.
UNAUTHENTICATED Arayan tanımlanamıyor veya istek geçerli kimlik doğrulama kimlik bilgilerine sahip değil.
UNAVAILABLE Hizmet kullanılamıyor. Bu büyük olasılıkla geçici bir durumdur ve ertelemeyle 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.