کاتلین از استثناهای بررسی شده پشتیبانی نمی کند. این کار مدیریت خطا را ساده و ساده میکند، زیرا میتوانید تنها استثناهایی را که به طور بالقوه قابل بازیابی هستند، مدیریت کنید. و از آنجایی که مجبور نیستید به طور صریح از هر استثنای ممکن استفاده کنید، کد شما درهم و برهم کمتر است و در نتیجه، بیشتر بر هدف اصلی خود متمرکز می شود.
خرابیهای قابل بازیابی مسائلی هستند که یک توسعهدهنده میتواند از ابتدا به آنها رسیدگی کند. به عنوان مثال، اگر شناسه ای که در تماس استفاده می شود معتبر نباشد، 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
را ارائه می دهد که ممکن است با آنها روبرو شوید:
کد | معنی |
---|---|
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 خارجی که فاقد اطلاعات کافی در مورد علت اصلی است، دریافت میشود، این خطا ممکن است برگردانده شود. |