2015-06-30 6 views
17

क्या किसी को पता है कि ActiveAndroid में एक सारणी कक्षा के लिए तालिका बनाना संभव है या नहीं। उदाहरण के लिए मैं दो ठोस वर्ग कुत्ते और बिल्ली के साथ एक अमूर्त वर्ग पशु हो सकता है। मैं की तरह कुछ करने के लिए सक्षम होना चाहते हैं:सक्रिय एंड्रॉइड अमूर्त वर्ग तालिका

List<Animal> animals = new Select().from(Animals.class).execute(); 

जिसमें 'जानवर' बचाया बिल्लियों और कुत्तों के सभी युक्त होगी। या:

Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle(); 

जहाँ 'जानवर' या तो एक बिल्ली या एक कुत्ता हो सकता है। दुर्भाग्यवश जब मैं ऐसा करता हूं तो मुझे अपवाद मिलता है क्योंकि अमूर्त वर्ग पशु के लिए कोई तालिका नहीं बनाई जाती है। क्या कोई जानता है कि मैं ActiveAndroid का उपयोग करके इस बारे में कैसे जा सकता हूं?

+1

क्या आप अमूर्तता के बजाय बेस क्लास का उपयोग नहीं कर सकते? –

+0

मुझे पूरा यकीन नहीं है कि मैं समझता हूं कि आप इसे ऐसा क्यों करना चाहते हैं? एक सार वर्ग का पूरा उद्देश्य इतना है कि आपको बाल वर्ग, जैसे 'बिल्ली' या 'कुत्ते' का उपयोग करना है। ध्यान दें कि आप 'पशु पशु' वस्तु कैसे बना रहे हैं, जिसे जावा में नहीं किया जा सकता है, हालांकि हाथ से पहले आपकी सूची पूरी की जा सकती है, हालांकि आपको ऑब्जेक्ट के साथ काम करने से पहले उपयुक्त उप-वर्ग में डालना होगा। –

+0

मैं ऊपर दिए गए उदाहरण में एक सार 'पशु' नहीं बनाऊंगा। मैं सक्रिय एंड्रॉइड को ऑब्जेक्ट के प्रकार के आधार पर मूल रूप से सहेजे जाने पर बिल्ली या कुत्ते का निर्माण करना चाहता हूं। – user3265561

उत्तर

1

दुर्भाग्य से ActiveAndroid इस तरह से मॉडल की विरासत का समर्थन नहीं करता है (https://github.com/pardom/ActiveAndroid/issues/14, https://github.com/pardom/ActiveAndroid/issues/257)।

आप यहाँ ActiveAndroid को संशोधित करना चाहता है तो आप क्या कर सकते हैं:

  • आप एक मॉडल (Animals) कुछ है कि कायम नहीं कर रहा है (com.activeandroid.annotation.Table को देखें) के रूप में परिभाषित की अनुमति देता है कि एनोटेशन किसी तरह का बनाएँ।
  • उस कक्षा के लिए प्रश्नों को निष्पादित करने की कोशिश करने पर आप अपने बच्चे वर्गों को निर्धारित करने के लिए प्रतिबिंब का उपयोग कर सकते हैं और फिर यह प्रति बच्चा कक्षा में यह क्वेरी कर सकते हैं।
  • फिर आप मूल रूप से प्रत्येक क्वेरी के परिणामों की सूची ले लेंगे और उन्हें एक सूची में जोड़ देंगे और उसे वापस कर देंगे।

ईमानदार होने के लिए मैंने कभी भी एंड्रॉइड ओआरएम पुस्तकालयों में विरासत नहीं देखी है, और व्यक्तिगत रूप से मुझे नहीं लगता कि यह मॉडल के लिए एक अच्छा डिजाइन पैटर्न है। आप इस पथ को नीचे जाने के लिए अपने तर्क पर पुनर्विचार करना चाह सकते हैं।

+0

मेरी मॉडल कक्षाओं को जारी रखते समय आप विरासत पर क्या सलाह देंगे? मैं 'नौकरियों' को बचाने में सक्षम होना चाहता हूं जो विभिन्न प्रकार के 'नौकरी' हो सकते हैं। क्या मैं नौकरी के प्रकार के लिए एक अलग टेबल रखने से बेहतर होगा, फिर एक 'मास्टर' टेबल जो उस नौकरी के प्रकार के लिए सही तालिका में नौकरी के प्रकार और विदेशी कुंजी को संग्रहीत करे? – user3265561

+1

@ user3265561 मैं जो करता हूं वह बहुत ही सामान्य तरीके से जॉब मॉडल बनाता है। कॉलम जॉबटाइप होगा और जो भी अन्य संपत्तियां सभी नौकरियों में समान हैं। इसमें एक अतिरिक्त प्रॉपर्टीज कॉलम भी होगा जो एक स्ट्रिंग होगा जिसमें किसी अन्य नौकरी विशिष्ट गुणों का क्रमबद्ध JSONObject शामिल होगा। – nyx

+0

तो इस तरह से मेरे पास एक सामान्य 'नौकरी' हो सकती है जिसे डीबी में सहेजा जाएगा, फिर प्रत्येक उपclassed 'RealJob' एक "serializeAdditionalProperties()" फ़ंक्शन को ओवरराइड कर सकता है जो उस ऑब्जेक्ट को पुनर्निर्माण करने के लिए आवश्यक जेसन को वापस कर देगा जब इसे deserialized किया गया था भविष्य में। – user3265561

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