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

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

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

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

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

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

HomeException को मैनेज करते समय, इसकी code और message फ़ील्ड की जांच करके देखें कि क्या गड़बड़ी हुई है.

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

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

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