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
कोड के बारे में बताया गया है जो आपको दिख सकते हैं:
कोड | मतलब |
---|---|
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 तब दिखता है, जब गड़बड़ी की ऐसी स्थिति आती है जिसे गड़बड़ी के किसी अन्य कोड का इस्तेमाल करके, कैटगरी में नहीं रखा जा सकता.
उदाहरण के लिए, यह गड़बड़ी तब दिख सकती है, जब किसी बाहरी एपीआई से मिली स्थिति की वैल्यू में, गड़बड़ी की मुख्य वजह के बारे में ज़रूरत के मुताबिक जानकारी न हो. |