Android'de hata işleme

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:

Tablo: HomeException kodlar
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.