لا تتوافق Kotlin مع الاستثناءات التي تم التحقّق منها. وهذا يبسط ويبسِّط معالجة الأخطاء، لأنّه يمكنك اختيار معالجة الاستثناءات التي يمكن استردادها فقط. ولأنّه ليس عليك التعامل صراحةً مع كل استثناء ممكن، ستكون التعليمات البرمجية أقل ازدحامًا، وبالتالي ستبقى أكثر تركيزًا على الغرض الأساسي منها.
الأعطال القابلة للاسترداد هي المشاكل التي يمكن للمطوّر معالجتها من جانبه.
على سبيل المثال، إذا كان المعرّف المستخدَم في طلب غير صالح، تُرسِل واجهة برمجة التطبيقات HomeException
مع رسالة invalid data
. يمكن بعد ذلك لمطوِّر التطبيق
اختيار إزالة رقم التعريف هذا من ذاكرة التخزين المؤقت أو عرض رسالة
على المستخدم مثل "لم يتم العثور على البنية".
مثال على كيفية معالجة خطأ قابل للاسترداد:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
يمكن أن تُعرِض أي طريقة في واجهات برمجة تطبيقات Home HomeException
، لذا ننصحك باستخدام رمز try-catch
لرصد HomeException
في جميع طلبات البيانات.
عند التعامل مع HomeException
، تحقّق من حقلَي code
وmessage
لمعرفة الخطأ الذي حدث.
سيؤدي أي استثناءات لم تتم معالجتها إلى تعطُّل تطبيقك.
يوضّح الجدول التالي معاني رموز HomeException
التي
قد تظهر لك:
الرمز | المعنى |
---|---|
ABORTED |
تم إلغاء العملية. يظهر هذا الخطأ عادةً عند حدوث مشكلة في المعالجة المتزامنة، مثل تعذُّر التحقّق من التسلسل أو إجهاض المعاملة. |
ALREADY_EXISTS |
المورد أو الكيان الذي تحاول إنشاءه متوفّر مسبقًا. يمكن أن يكون ذلك، على سبيل المثال، جدول زمني مُعنوَن لجهاز ترموستات. |
API_NOT_CONNECTED |
حاول العميل استدعاء طريقة من واجهة برمجة تطبيقات تعذّر الاتصال بها. يمكن أن يحدث ذلك عندما يكون الجهاز غير متصل بالإنترنت أو لا يتوافق مع واجهة برمجة التطبيقات التي تحاول الاتصال بها. |
CANCELLED |
تم إلغاء العملية، عادةً من قِبل المتصل. |
DATA_LOSS |
ثمة بيانات تالفة أو مفقودة ويتعذّر استرجاعها. |
DEADLINE_EXCEEDED |
انتهت المهلة قبل اكتمال العملية. بالنسبة إلى العمليات التي تغيّر حالة النظام، قد يتم عرض هذا الخطأ حتى إذا اكتملت العملية بنجاح. |
FAILED_PRECONDITION |
تم رفض العملية لأنّ النظام ليس في الحالة
المطلوبة لتنفيذ العملية. على سبيل المثال، قد تظهر
هذه الرسالة إذا ضغطت على رمز
stop
في فرن سبق أن تم إيقافه. |
INTERNAL |
الأخطاء الداخلية وهذا يعني أنّه تمّ انتهاك بعض الشروط الثابتة التي يتوقعها النظام الأساسي. رمز الخطأ هذا مخصّص للأخطاء الخطيرة. |
INVALID_ARGUMENT |
قدّمت وسيطة خارج النطاق المتوقّع للقيم. |
NOT_FOUND |
حدّدت عنصرًا أو موردًا لا يمكن العثور عليه. على سبيل المثال، تحديد معرّف مقطع صوتي غير متوفّر عند الاتصال بـ
activateAudioTrack على جهاز مشغّل وسائط |
OUT_OF_RANGE |
تجاوزت إحدى المَعلمات النطاق المسموح به استنادًا إلى حالة النظام الحالية. تظهر هذه الرسالة عندما تكون القيمة ضمن نطاق القيم التي يمكن أن تقبلها طلب بيانات واجهة برمجة التطبيقات، ولكنّها لا تُمثّل معنىً في السياق الحالي. |
PERMISSION_DENIED |
ليس لديك الإذن بتنفيذ العملية المحدّدة. يجب عدم تفسير رمز الخطأ هذا على أنّه يعني أنّ الطلب صالح بخلاف ذلك. |
RESOURCE_EXHAUSTED |
تم استنفاد بعض الموارد. على سبيل المثال، يمكن أن يتم طرح هذا الحدث
عندما يتصل أحد الأشخاص
dispense على جهاز مغذّي للحيوانات الأليفة ولا يتوفّر
المزيد من الطعام في الوحدة. |
SDK_INITIALIZATION_MISSING_INFO |
لم يتم إعداد حزمة تطوير البرامج (SDK) بالكامل. على سبيل المثال، ستظهر لك هذه الرسالة
إذا حاولت الحصول على TraitFactory لسمة
لم يتم تسجيلها. راجِع مقالة
إعداد المنزل على Android. |
UNAUTHENTICATED |
لا يمكن تحديد هوية المتصل أو لا يتضمّن الطلب بيانات اعتماد مصادقة válida. |
UNAVAILABLE |
الخدمة غير متاحة. من المرجّح أنّ هذا الموقف هو حالة عابر يمكن تصحيحها من خلال إعادة المحاولة مع فترة انتظار. يُرجى العِلم أنّه قد لا يكون من الآمن دائمًا إعادة محاولة العمليات غير الثابتة. |
UNIMPLEMENTED |
لم يتم تنفيذ العملية المطلوبة أو تفعيلها أو إتاحتها في هذه الخدمة. |
UNKNOWN |
حدث خطأ غير معروف. بشكل عام، يظهر الرمز UNKNOWN
عند حدوث خطأ لا يمكن تصنيفه باستخدام أي من
رموز الخطأ الأخرى. على سبيل المثال، قد يتم عرض هذا الخطأ عند تلقّي قيمة
حالة من واجهة برمجة تطبيقات خارجية لا تتضمّن معلومات
كافية عن السبب الأساسي. |