Android'de 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, 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.