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