Android पर गड़बड़ी ठीक करना

Kotlin में, चेक किए गए अपवादों की सुविधा उपलब्ध नहीं है. इससे गड़बड़ी को ठीक करना आसान और बेहतर हो जाता है. ऐसा इसलिए, क्योंकि सिर्फ़ उन अपवादों को ठीक किया जा सकता है जिन्हें ठीक किया जा सकता है. इसके अलावा, आपको हर संभावित अपवाद को साफ़ तौर पर ठीक करने की ज़रूरत नहीं होती. इसलिए, आपका कोड कम उलझा हुआ होता है और इस वजह से, यह अपने मुख्य मकसद पर ज़्यादा फ़ोकस कर पाता है.

ठीक की जा सकने वाली गड़बड़ियां वे समस्याएं होती हैं जिन्हें डेवलपर अपने लेवल पर ठीक कर सकता है. उदाहरण के लिए, अगर कॉल में इस्तेमाल किया गया कोई आईडी मान्य नहीं है, तो एपीआई, HomeException को invalid data मैसेज के साथ दिखाता है. इसके बाद, ऐप्लिकेशन का डेवलपर या तो उस आईडी को अपनी कैश मेमोरी से हटा सकता है या उपयोगकर्ता को "स्ट्रक्चर नहीं मिला" जैसा मैसेज दिखा सकता है.

ठीक की जा सकने वाली गड़बड़ी को ठीक करने के तरीके का उदाहरण:

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

Home APIs में मौजूद कोई भी तरीका, HomeException दिखा सकता है. इसलिए, हमारा सुझाव है कि सभी कॉल पर HomeException को पकड़ने के लिए, try-catch ब्लॉक का इस्तेमाल करें.

HomeException को ठीक करते समय, यह जानने के लिए कि क्या गड़बड़ी हुई है, इसके error.code और error.message फ़ील्ड देखें. सब-एरर कोड भी हो सकते हैं इसलिए, getSubErrorCodes() तरीके को कॉल करें और नतीजा देखें.

ठीक न किए गए अपवादों की वजह से, आपका ऐप्लिकेशन क्रैश हो जाएगा.

यहां दी गई टेबल में, HomeException कोड के मतलब बताए गए हैं. ये कोड आपको दिख सकते हैं:

टेबल: HomeException कोड
कोड मतलब
ABORTED आम तौर पर, एक साथ कई काम करने से जुड़ी समस्या की वजह से, ऑपरेशन को रद्द कर दिया गया. जैसे, सीक्वेंसर की जांच में गड़बड़ी या लेन-देन रद्द होना.
ALREADY_EXISTS क्लाइंट ने जिस इकाई को बनाने की कोशिश की, वह पहले से मौजूद है. जैसे, कोई फ़ाइल या डायरेक्ट्री.
API_NOT_CONNECTED क्लाइंट ने किसी ऐसे एपीआई के तरीके को कॉल करने की कोशिश की जो कनेक्ट नहीं हो पाया. ऐसा तब हो सकता है, जब डिवाइस ऑफ़लाइन हो या वह उस एपीआई के साथ काम न करता हो जिसे क्लाइंट ने कॉल करने की कोशिश की.
CANCELLED आम तौर पर, कॉलर ने ऑपरेशन रद्द कर दिया.
COMMAND_FAILED कमांड को लागू नहीं किया जा सका. ज़्यादा जानकारी के लिए, सब-एरर कोड देखें.
CURSOR_WINDOW_NOT_SUPPORTED किसी ऐसे तरीके को कॉल किया गया है जो CursorWindow का इस्तेमाल करता है. हालांकि, मौजूदा संदर्भ में CursorWindow या तो चालू नहीं है या काम नहीं करता.
DATA_LOSS डेटा को वापस नहीं पाया जा सकता या डेटा खराब हो गया है.
DEADLINE_EXCEEDED ऑपरेशन पूरा होने से पहले ही समयसीमा खत्म हो गई. सिस्टम की स्थिति में बदलाव करने वाले ऑपरेशन के लिए, यह गड़बड़ी तब भी दिख सकती है, जब ऑपरेशन सफलतापूर्वक पूरा हो गया हो.
DECOMMISSIONING_INELIGIBLE डिवाइस को बंद नहीं किया जा सका, क्योंकि यह बंद करने के लिए ज़रूरी शर्तें पूरी नहीं करता.
FAILED_PRECONDITION ऑपरेशन को अस्वीकार कर दिया गया, क्योंकि सिस्टम उस स्थिति में नहीं है जो ऑपरेशन को लागू करने के लिए ज़रूरी है. उदाहरण के लिए, अगर OvenCavityOperationalStateTrait के stop कमांड को किसी ऐसे ओवन पर कॉल किया गया है जो पहले से बंद है, तो आपको यह मैसेज मिल सकता है.
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 एसडीके को, ज़रूरी सभी जानकारी के बिना ही शुरू कर दिया गया. उदाहरण के लिए, अगर क्लाइंट किसी दिए गए ट्रेट आईडी के लिए TraitFactory पाने की कोशिश करता है, लेकिन एसडीके को शुरू करते समय उस ट्रेट को शामिल नहीं किया गया था, तो यह गड़बड़ी दिखती है. Android पर होम को शुरू करना देखें .
UNAUTHENTICATED कॉलर की पहचान नहीं की जा सकती या अनुरोध में पुष्टि करने के मान्य क्रेडेंशियल नहीं हैं.
UNAVAILABLE यह सेवा उपलब्ध नहीं है. ज़्यादातर मामलों में, यह कुछ समय के लिए होने वाली समस्या होती है . इसे बैकऑफ़ के साथ फिर से कोशिश करके ठीक किया जा सकता है. ध्यान दें कि नॉन-आईडेमपोटेंट ऑपरेशन को फिर से करने में हमेशा सुरक्षा नहीं होती.
UNIMPLEMENTED अनुरोध किया गया ऑपरेशन, इस सेवा में लागू, काम नहीं करता या चालू नहीं है.
UNKNOWN ऐसी गड़बड़ी जिसकी कोई जानकारी नहीं है. UNKNOWN तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे अन्य किसी गड़बड़ी कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, जब किसी बाहरी एपीआई से मिली स्टेटस वैल्यू में, गड़बड़ी की असली वजह के बारे में पूरी जानकारी नहीं होती, तो यह गड़बड़ी दिख सकती है.
WRITE_FAILED डेटा सेव नहीं किया जा सका. ज़्यादा जानकारी के लिए, सब-एरर कोड देखें.