11

में (क्रॉस-प्रोसेस) अपवादों से निपटना मेरे पास मेरे एंड्रॉइड ऐप में कस्टम कंटेंट प्रदाता है जो उचित रूप से अच्छी तरह से काम करता है। मैं अन्य ऐप्स को अपने सामग्री प्रदाता तक पहुंचने की अपेक्षा करता हूं। मुझे अपवाद और त्रुटियों को संवाद करने के लिए कुछ साफ तरीका चाहिए, लेकिन जहां तक ​​मैं एंड्रॉइड कंटेंट प्रदाता ढांचे को बता सकता हूं, प्रक्रियाओं में अपवादों को प्रसारित करने का कोई तरीका नहीं प्रदान करता है।एंड्रॉइड कस्टम कंटेंट प्रदाता

मुझे अपने कॉलर को अपवाद स्थिति कैसे इंगित करनी चाहिए? क्या मुझे किसी भी तरह से इसे अपने लौटाए गए डेटा में एन्कोड करना है और ग्राहकों को इसकी जांच करने के लिए भरोसा करना है? क्या कोई विकल्प है? यदि सामान्य रिटर्न डेटा में एन्कोडिंग यह है, तो सबसे अच्छा तरीका क्या है? (मैं Uriinsert द्वारा दिया, या intupdate या delete द्वारा लौटाए गए के बारे में Cursor एक query कॉल द्वारा वापस लिए विकल्प की एक संख्या है, लेकिन क्या देख सकते हैं?)

+0

जब आपने अपने 'ContentProvider' से कुछ प्रकार के' रनटाइम अपवाद 'को बढ़ाने का प्रयास किया, तो क्या हुआ? – CommonsWare

+0

प्रदाता 'ContentProviderClient', 'query' और' insert 'का उपयोग करके प्रदाता' null' लौटाता है जब प्रदाता 'RuntimeException' फेंकता है। लॉगकैट में मैं टैग 'जावाबिन्डर' टैग के साथ एक संदेश देख सकता हूं: '*** असीमित रिमोट अपवाद! (अपवाद अभी तक प्रक्रियाओं में समर्थित नहीं हैं।) ' –

उत्तर

14

RuntimeException उपवर्गों जो की एक छोटी सूची है, यदि प्रदाता में फेंक दिया जाता है, तो उसे क्लाइंट ऐप में फिर से फेंक दिया जाएगा। ये हैं:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException

स्रोत: Creating Content ProvidersIAE और NPE उल्लेख; मैंने अनुमान लगाया कि अन्य the Javadoc forParcel.writeException के आधार पर काम करेंगे।

क्लाइंट ऐप केवल विवरण संदेश प्राप्त करेगा, न कि स्टैक ट्रेस या कारण स्टैक। असाधारण राज्य के लिए जिसे String (विस्तार संदेश) में एन्कोड किया जा सकता है, यह एक उचित विकल्प है।

मुझे अभी भी अन्य समाधानों में रुचि है।

+0

मैं एंड्रॉइड के [org.json पैकेज] (http://developer.android.com/reference/org/json/package-summary.html) का उपयोग करके डेटा को एन्कोड करने के लिए समाप्त हुआ 'IllegalStateException' का विस्तृत संदेश, और क्लाइंट के लिए अन्य 'अपवाद' कक्षाओं में प्रतिबिंब का उपयोग करके अनुवाद करने के लिए एक एपीआई प्रदान करता है। –

संबंधित मुद्दे