رسیدگی به خطا، رسیدگی به خطا، رسیدگی به خطا

کاتلین از استثناهای بررسی شده پشتیبانی نمی کند. این کار مدیریت خطا را ساده و ساده می‌کند، زیرا می‌توانید تنها استثناهایی را که به طور بالقوه قابل بازیابی هستند، مدیریت کنید. و از آنجایی که مجبور نیستید به طور صریح از هر استثنای ممکن استفاده کنید، کد شما درهم و برهم کمتر است و در نتیجه، بیشتر بر هدف اصلی خود متمرکز می شود.

خرابی‌های قابل بازیابی مسائلی هستند که یک توسعه‌دهنده می‌تواند از ابتدا به آنها رسیدگی کند. به عنوان مثال، اگر شناسه ای که در تماس استفاده می شود معتبر نباشد، API یک HomeException با یک پیام invalid data پرتاب می کند. سپس توسعه‌دهنده برنامه می‌تواند انتخاب کند که شناسه را از حافظه پنهان خود حذف کند یا پیامی مانند «ساختار یافت نشد» را به کاربر نشان دهد.

مثالی از نحوه برخورد با یک شکست قابل بازیابی:

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

هر روشی در APIهای Home می‌تواند یک HomeException ایجاد کند، بنابراین توصیه می‌کنیم از یک بلوک try-catch برای گرفتن HomeException در همه تماس‌ها استفاده کنید.

هنگام مدیریت HomeException ، قسمت های code و message آن را بررسی کنید تا متوجه شوید چه مشکلی پیش آمده است.

هرگونه استثناء کنترل نشده منجر به خرابی برنامه شما می شود.

جدول زیر معانی کدهای HomeException را ارائه می دهد که ممکن است با آنها روبرو شوید:

جدول: کدهای HomeException
کد معنی
ABORTED عملیات سقط شد. این معمولاً زمانی ظاهر می‌شود که یک مشکل همزمانی مانند شکست بررسی ترتیبی یا لغو تراکنش وجود داشته باشد.
ALREADY_EXISTS منبع یا موجودی که می‌خواهید ایجاد کنید از قبل وجود دارد. به عنوان مثال، این می تواند یک برنامه زمانی نامگذاری شده برای یک ترموستات باشد.
API_NOT_CONNECTED کلاینت سعی کرد روشی را از یک API فراخوانی کند که اتصال ناموفق بود. این ممکن است زمانی اتفاق بیفتد که دستگاه آفلاین است یا از API که می‌خواهید با آن تماس بگیرید پشتیبانی نمی‌کند.
CANCELLED این عملیات معمولاً توسط تماس گیرنده لغو شد.
DATA_LOSS از دست دادن یا فساد غیرقابل جبران داده.
DEADLINE_EXCEEDED مهلت قبل از تکمیل عملیات به پایان رسید. برای عملیاتی که وضعیت سیستم را تغییر می دهد، حتی اگر عملیات با موفقیت به پایان رسیده باشد، ممکن است این خطا برگردانده شود.
FAILED_PRECONDITION عملیات رد شد زیرا سیستم در وضعیت لازم برای اجرای عملیات نیست. برای مثال، اگر در فری که قبلاً متوقف شده است، stop تماس بگیرید، ممکن است این پیام را دریافت کنید.
INTERNAL خطاهای داخلی این بدان معنی است که برخی از متغیرهای مورد انتظار سیستم اساسی شکسته شده اند. این کد خطا برای خطاهای جدی رزرو شده است.
INVALID_ARGUMENT شما یک آرگومان ارائه کردید که خارج از محدوده مورد انتظار مقادیر است.
NOT_FOUND شما موجودیت یا منبعی را مشخص کرده اید که یافت نمی شود. به عنوان مثال، هنگام تماس با activateAudioTrack در دستگاه پخش کننده رسانه، یک شناسه آهنگ موجود را مشخص کنید.
OUT_OF_RANGE بر اساس وضعیت فعلی سیستم، یک پارامتر از محدوده معتبر فراتر رفت. این پیام زمانی رخ می‌دهد که مقدار در محدوده مقادیری باشد که فراخوانی API می‌تواند به طور بالقوه بپذیرد، اما در شرایط فعلی معنی ندارد.
PERMISSION_DENIED شما اجازه اجرای عملیات مشخص شده را ندارید. این کد خطا نباید به این معنا تفسیر شود که درخواست در غیر این صورت معتبر است.
RESOURCE_EXHAUSTED برخی از منابع تمام شده است. به عنوان مثال، این می تواند زمانی پرتاب شود که یک دستگاه تغذیه حیوانات خانگی را با دستگاه تغذیه تماس می dispense و غذای دیگری در دستگاه باقی نمی ماند.
SDK_INITIALIZATION_MISSING_INFO SDK به طور کامل راه اندازی نشده بود. برای مثال، اگر بخواهید یک TraitFactory برای صفتی که ثبت نشده است دریافت کنید، این پیام را دریافت خواهید کرد. به مقداردهی اولیه مراجعه کنید.
UNAUTHENTICATED تماس گیرنده را نمی توان شناسایی کرد یا درخواست اعتبار احراز هویت معتبری ندارد.
UNAVAILABLE سرویس در دسترس نیست. این به احتمال زیاد یک وضعیت گذرا است، که می توان با تلاش مجدد با عقب نشینی آن را اصلاح کرد. توجه داشته باشید که همیشه امتحان مجدد عملیات های غیر توانمند ایمن نیست.
UNIMPLEMENTED عملیات درخواستی در این سرویس اجرا، پشتیبانی یا فعال نشده است.
UNKNOWN خطای ناشناخته به طور کلی، UNKNOWN زمانی ظاهر می‌شود که شرایط خطایی رخ می‌دهد که نمی‌توان با استفاده از کدهای خطای دیگر طبقه‌بندی کرد. به عنوان مثال، زمانی که یک مقدار وضعیت از یک API خارجی که فاقد اطلاعات کافی در مورد علت اصلی است، دریافت می‌شود، این خطا ممکن است برگردانده شود.