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

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

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

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

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

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

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

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

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

टेबल: HomeException codes
कोड मतलब
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 कुछ रिसॉर्स खत्म हो गए हैं. ऐसा शायद किसी उपयोगकर्ता के लिए तय किए गए कोटे के पूरा होने या पूरे फ़ाइल सिस्टम में जगह खत्म होने की वजह से हुआ है. उदाहरण के लिए, यह गड़बड़ी तब हो सकती है, जब पालतू जानवरों को खाना देने वाले डिवाइस पर DispenseTrait की dispense कमांड को कॉल किया गया हो, लेकिन यूनिट में खाना न बचा हो.
SDK_INITIALIZATION_MISSING_INFO एसडीके को सभी ज़रूरी जानकारी के बिना शुरू किया गया था. उदाहरण के लिए, यह गड़बड़ी तब होती है, जब क्लाइंट किसी दिए गए ट्रेट आईडी के लिए TraitFactory पाने की कोशिश करता है, लेकिन SDK को शुरू करते समय ट्रेट को शामिल नहीं किया गया था. Android पर होम को शुरू करना लेख पढ़ें.
UNAUTHENTICATED कॉल करने वाले की पहचान नहीं की जा सकती या अनुरोध में पुष्टि करने के मान्य क्रेडेंशियल नहीं हैं.
UNAVAILABLE यह सेवा उपलब्ध नहीं है. यह एक अस्थायी समस्या है. कुछ समय बाद फिर से कोशिश करने पर, यह ठीक हो सकती है. ध्यान दें कि गैर-आईडम्पोटेंट कार्रवाइयों को फिर से आज़माना हमेशा सुरक्षित नहीं होता.
UNIMPLEMENTED अनुरोध की गई कार्रवाई, इस सेवा में लागू नहीं की गई है, काम नहीं करती है या चालू नहीं है.
UNKNOWN ऐसी गड़बड़ी जिसके बारे में कोई जानकारी नहीं है. UNKNOWN तब दिखता है, जब कोई ऐसी गड़बड़ी होती है जिसे किसी अन्य गड़बड़ी कोड का इस्तेमाल करके कैटगरी में नहीं रखा जा सकता. उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्थिति की वैल्यू में, गड़बड़ी की मुख्य वजह के बारे में ज़रूरी जानकारी न हो.
WRITE_FAILED लिखने की प्रोसेस पूरी नहीं हो सकी. ज़्यादा जानकारी के लिए, सब गड़बड़ी कोड देखें.