کاتلین از استثناهای بررسی شده پشتیبانی نمی کند. این کار مدیریت خطا را ساده و ساده میکند، زیرا میتوانید تنها استثناهایی را که به طور بالقوه قابل بازیابی هستند، مدیریت کنید. و از آنجایی که مجبور نیستید به طور صریح از هر استثنای ممکن استفاده کنید، کد شما درهم و برهم کمتر است و در نتیجه، بیشتر بر هدف اصلی خود متمرکز می شود.
خرابیهای قابل بازیابی مسائلی هستند که یک توسعهدهنده میتواند از ابتدا به آنها رسیدگی کند. به عنوان مثال، اگر شناسه ای که در تماس استفاده می شود معتبر نباشد، 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 OvenCavityOperationalStateTrait در فری که قبلاً متوقف شده فراخوانی شده باشد، یا اگر بخواهید عملیات rmdir را در غیر دایرکتوری اجرا کنید، ممکن است این پیام را دریافت کنید. |
INTERNAL | خطاهای داخلی این بدان معنی است که برخی از متغیرهای مورد انتظار سیستم اساسی شکسته شده اند. این کد خطا برای خطاهای جدی رزرو شده است. |
INVALID_ARGUMENT | مشتری آرگومانی ارائه کرد که خارج از محدوده مورد انتظار مقادیر است. |
NOT_FOUND | یک موجودیت درخواستی، مانند یک فایل یا فهرست، یافت نشد. اگر درخواستی برای کل دسته از کاربران رد شود، مانند عرضه تدریجی ویژگی یا لیست مجوزهای غیرمستند، ممکن است از NOT_FOUND استفاده شود. اگر درخواستی برای برخی از کاربران در یک کلاس از کاربران رد شود، مانند کنترل دسترسی مبتنی بر کاربر، باید از PERMISSION_DENIED استفاده شود. |
OUT_OF_RANGE | این عملیات از محدوده معتبر گذشته است، مانند جستجو یا خواندن end-of-file گذشته. برخلاف INVALID_ARGUMENT ، این خطا نشان دهنده مشکلی است که در صورت تغییر وضعیت سیستم ممکن است برطرف شود. |
PERMISSION_DENIED | تماس گیرنده اجازه اجرای عملیات مشخص شده را ندارد. PERMISSION_DENIED نباید برای ردهای ناشی از فرسودگی برخی منابع استفاده شود ( RESOURCE_EXHAUSTED برای آن خطاها استفاده کنید). PERMISSION_DENIED در صورتی که تماس گیرنده قابل شناسایی نباشد نباید استفاده شود ( UNAUTHENTICATED برای این خطاها استفاده کنید). این کد خطا به این معنی نیست که درخواست معتبر است یا موجودیت درخواست شده وجود دارد یا سایر پیش شرط ها را برآورده می کند. |
RESOURCE_EXHAUSTED | برخی از منابع تمام شده است، شاید به دلیل رسیدن به سهمیه هر کاربر یا کمبود فضای کل سیستم فایل. به عنوان مثال، اگر دستور dispense DispenseTrait در دستگاه تغذیه حیوانات خانگی فراخوانی شود، اما غذای دیگری در دستگاه باقی نماند، این خطا ممکن است ایجاد شود. |
SDK_INITIALIZATION_MISSING_INFO | SDK بدون تمام اطلاعات مورد نیاز مقداردهی اولیه شد. به عنوان مثال، اگر مشتری تلاش کند یک TraitFactory برای یک شناسه مشخصه دریافت کند، اما این ویژگی هنگام شروع اولیه SDK لحاظ نشده باشد، این خطا ایجاد می شود. به Initialize the home در Android مراجعه کنید. |
UNAUTHENTICATED | تماس گیرنده را نمی توان شناسایی کرد یا درخواست اعتبار احراز هویت معتبری ندارد. |
UNAVAILABLE | سرویس در دسترس نیست. این به احتمال زیاد یک وضعیت گذرا است، که می توان با تلاش مجدد با عقب نشینی آن را اصلاح کرد. توجه داشته باشید که همیشه امتحان مجدد عملیات های غیر توانمند ایمن نیست. |
UNIMPLEMENTED | عملیات درخواستی در این سرویس اجرا، پشتیبانی یا فعال نشده است. |
UNKNOWN | خطای ناشناخته UNKNOWN زمانی ظاهر می شود که یک وضعیت خطایی رخ می دهد که نمی توان با استفاده از هیچ یک از کدهای خطای دیگر طبقه بندی کرد. به عنوان مثال، زمانی که یک مقدار وضعیت دریافتی از یک API خارجی فاقد اطلاعات کافی در مورد علت اصلی باشد، این خطا ممکن است برگردانده شود. |