لا تتيح لغة Kotlin استخدام الاستثناءات التي تم التحقّق منها. يؤدي ذلك إلى تبسيط معالجة الأخطاء وتنظيمها، لأنه يمكنك اختيار معالجة الاستثناءات التي يمكن استردادها فقط. وبما أنّه ليس عليك التعامل بشكل صريح مع كل استثناء محتمل، يكون الرمز البرمجي أقل فوضى، وبالتالي يظل أكثر تركيزًا على غرضه الأساسي.
الأعطال القابلة للإصلاح هي مشاكل يمكن للمطوّر معالجتها من جانبه.
على سبيل المثال، إذا لم يكن المعرّف المستخدَم في طلب صالحًا، ستعرض واجهة برمجة التطبيقات
HomeException مع رسالة invalid data. ويمكن لمطوّر التطبيق بعد ذلك اختيار إزالة رقم التعريف هذا من ذاكرة التخزين المؤقت أو عرض رسالة للمستخدم مثل "لم يتم العثور على البنية".
في ما يلي مثال على كيفية التعامل مع خطأ يمكن إصلاحه:
val result =
try {
homeManager.requestPermissions()
} catch (e: HomeException) {
PermissionsResult(
PermissionsResultStatus.ERROR,
"Got HomeException with error: ${e.message}",
)
}
يمكن لأي طريقة في Home APIs أن تؤدي إلى ظهور
HomeException، لذا ننصحك باستخدام مجموعة try-catch
لرصد HomeException في جميع الطلبات.
عند التعامل مع HomeException، تحقَّق من حقلَي
error.code و
error.message لمعرفة الخطأ الذي حدث. قد تكون هناك رموز أخطاء فرعية
أيضًا، لذا يمكنك استدعاء طريقة
getSubErrorCodes() والتحقّق من النتيجة.
ستؤدي أي استثناءات لم تتم معالجتها إلى تعطُّل تطبيقك.
يوضّح الجدول التالي معاني رموز HomeException التي قد تظهر لك:
| الرمز | المعنى |
|---|---|
ABORTED |
تم إلغاء العملية، عادةً بسبب مشكلة في التزامن، مثل تعذُّر التحقّق من التسلسل أو إلغاء المعاملة. |
ALREADY_EXISTS |
الكيان الذي حاول العميل إنشاءه، مثل ملف أو دليل، موجود مسبقًا. |
API_NOT_CONNECTED |
حاول العميل استدعاء طريقة من واجهة برمجة تطبيقات تعذّر الاتصال بها. يمكن أن يحدث ذلك عندما يكون الجهاز غير متصل بالإنترنت أو لا يتوافق مع واجهة برمجة التطبيقات التي حاول العميل طلبها. |
CANCELLED |
تم إلغاء العملية، عادةً من قِبل المتصل. |
COMMAND_FAILED |
تعذّر تنفيذ الأمر. يُرجى الاطّلاع على رموز الخطأ الفرعية لمزيد من التفاصيل. |
CURSOR_WINDOW_NOT_SUPPORTED |
تم استدعاء طريقة تستخدم
CursorWindow، ولكن
CursorWindow إما غير مفعَّلة أو غير متاحة في
السياق الحالي. |
DATA_LOSS |
حدث فقدان أو تلف للبيانات بشكل لا يمكن إصلاحه. |
DEADLINE_EXCEEDED |
انتهى الموعد النهائي قبل اكتمال العملية. بالنسبة إلى العمليات التي تغيّر حالة النظام، قد يظهر هذا الخطأ حتى إذا اكتملت العملية بنجاح. |
DECOMMISSIONING_INELIGIBLE |
تعذّر إيقاف التشغيل نهائيًا لأنّ الجهاز غير مؤهَّل لذلك. |
FAILED_PRECONDITION |
تم رفض العملية لأنّ النظام ليس في الحالة المطلوبة لتنفيذها. على سبيل المثال، قد تظهر لك هذه الرسالة إذا تم إرسال الأمر stop من OvenCavityOperationalStateTrait إلى فرن متوقف عن العمل. |
INTERNAL |
أخطاء داخلية وهذا يعني أنّ بعض الثوابت التي يتوقعها النظام الأساسي قد تم كسرها. يتم حجز رمز الخطأ هذا للأخطاء الخطيرة. |
INVALID_ARGUMENT |
قدّم العميل وسيطة خارج النطاق المتوقّع للقيم. |
INVALID_DATA_HOLDER |
صاحب البيانات غير صالح. |
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 إلى جهاز لإطعام الحيوانات الأليفة ولكن لم يعد هناك طعام في الجهاز.قد يرجع ذلك أيضًا إلى تجاوز حصة مشروع Home APIs. لمزيد من المعلومات، يُرجى الاطّلاع على إدارة الحصص. |
SDK_INITIALIZATION_MISSING_INFO |
تمت تهيئة حزمة تطوير البرامج (SDK) بدون توفير جميع المعلومات المطلوبة.
على سبيل المثال، يظهر هذا الخطأ إذا حاول العميل
الحصول على TraitFactory لمعرّف سمة معيّن ولكن لم يتم تضمين السمة
عند إعداد حزمة تطوير البرامج (SDK). يُرجى الاطّلاع على
تهيئة المنزل على Android. |
UNAUTHENTICATED |
لا يمكن تحديد هوية المتصل أو لا يحتوي الطلب على بيانات اعتماد مصادقة صالحة. |
UNAVAILABLE |
الخدمة غير متوفّرة. على الأرجح أنّ هذه الحالة مؤقتة ويمكن تصحيحها من خلال إعادة المحاولة مع استخدام فترة انتظار. يُرجى العِلم أنّه ليس من الآمن دائمًا إعادة محاولة تنفيذ العمليات غير المتكررة. |
UNIMPLEMENTED |
لم يتم تنفيذ العملية المطلوبة أو إتاحتها أو تفعيلها في هذه الخدمة. |
UNKNOWN |
حدث خطأ غير معروف. يظهر الرمز UNKNOWN عند حدوث حالة خطأ لا يمكن تصنيفها باستخدام أي من رموز الخطأ الأخرى.
على سبيل المثال، قد يظهر هذا الخطأ عندما لا تتضمّن قيمة الحالة التي تم تلقّيها من واجهة برمجة تطبيقات خارجية معلومات كافية حول السبب الأساسي. |
WRITE_FAILED |
تعذّر تنفيذ عملية الكتابة. يُرجى الاطّلاع على رموز الخطأ الفرعية لمزيد من التفاصيل. |