2011-09-28 10 views
12

मेरा ऐप मुख्य तालिका से डेटा लोड करने के लिए CursorLoader का उपयोग कर रहा है। की सहायता से डेटा ListView में प्रदर्शित किया जाएगा। ListView में प्रदर्शित दृश्य को भी बाल तालिका से डेटा की आवश्यकता होती है। तालिकाओं का रिश्ता एक से कई है।कर्सर लोडर का उपयोग कर बाल तालिका से डेटा कैसे पुनर्प्राप्त करें जो मुख्य तालिका से डेटा लोड करता है?

  • मैं क्वेरी दौरान दोनों तालिकाओं शामिल होते हैं, संयुक्त रिकॉर्ड बच्चे रिकॉर्ड के रूप में के रूप में कई इस प्रकार ListView में यह मुख्य तालिका में एक ही रिकॉर्ड के लिए कई आइटम प्रदर्शित करेगा हो जाएगा,,।

  • यदि मैं तालिका में शामिल नहीं होता हूं, तो मुझे यकीन नहीं है कि CursorLoader के बाद बाल रिकॉर्ड पुनर्प्राप्त करने का सबसे अच्छा तरीका कर्सर के माध्यम से डेटा वितरित कर दिया गया है। कोई मेरी मदद करने में सक्षम है?

+0

क्या आपको इसके लिए कोई जवाब मिला? मैं कुछ इसी तरह की तलाश में हूं। मैं भी एक-से-कई संबंधों के साथ 2 टेबल चाहता हूं; और मैं 'लोडर' का उपयोग कर डेटा लोड करने का एक प्रभावी तरीका ढूंढ रहा हूं। – curioustechizen

उत्तर

0

आपको शामिल होने का विकल्प चुनना चाहिए और यह सुनिश्चित करने के लिए अपनी क्वेरी के लिए अपना सॉर्ट ऑर्डर सेट करना चाहिए कि परिणामों को मुख्य तालिका में परिणामों द्वारा क्रमबद्ध किया गया हो।

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

parent(id,name) 
child(id,parentId,age) 

सबसे पुराना बच्चे के साथ सभी माता पिता को क्वेरी करने के लिए::

1

बच्चे तालिका डेटा की जरूरत नहीं है, तो आप मुख्य तालिका JSON अंकन की तरह कुछ का उपयोग करते हुए कि डेटा रखा और फिर CursorAdapter के लिए bindView विधि के अंदर इसे बाहर पार्स सकता है अलग से पूछे जा करने के लिए। बच्चे की तालिका में डेटा की जटिलता के आधार पर इसमें प्रदर्शन समस्याएं हो सकती हैं। लेकिन इससे आपको एक कर्सर का उपयोग करने की अनुमति मिल जाएगी।

एक और दृष्टिकोण जो आप ले सकते हैं वह एक डीएओ ऑब्जेक्ट बनाना है जो कच्चे प्रश्न को शामिल होने के रूप में चलाता है (इसलिए आपको कई पंक्तियां मिलती हैं) और उसके बाद कर्सर को उस सूची में संसाधित करता है जहां फू डेटा का प्रतिनिधित्व करने वाला POJO होता है। (या एन + 1 क्वेरी चलाएं - मुख्य क्वेरी और फिर प्रत्येक पंक्ति के लिए एक उप क्वेरी)। फिर एक लोडर बनाएं जो डीएओ को एक सूची वापस करने के लिए कहता है और उस से ListAdapter का उपयोग करता है। आपका कस्टम लोडर अभी भी डेटा परिवर्तन अधिसूचनाओं के लिए पंजीकरण कर सकता है और पुनः लोडिंग कर सकता है। मैंने कर्सर लोडर को अपने स्वयं के लोडर बनाने के लिए एक पैटर्न के रूप में उपयोग किया है, जब मैं सूची दृश्य में कर्सर के साथ गड़बड़ नहीं करना चाहता था और यह अच्छी तरह से काम करता है।

+0

3 साल बाद और मुझे अभी भी इस समस्या का बेहतर दृष्टिकोण नहीं मिल रहा है। बाल डेटा के जेसन प्रतिनिधित्व को पकड़ने के लिए अभिभावक तालिका में कॉलम का उपयोग करने का आपका सुझाव मेरे उपयोग के मामले के लिए अच्छा काम करता है। मेरा एक-से-कई लगभग 1-टू-"एक मुट्ठी भर" है, इसलिए संग्रह से जेसन एरे का क्रमबद्धता समय स्ट्रिंग को स्टोर करने के लिए आवश्यक स्थान के रूप में काफी कम है। यदि आवश्यक हो तो पूछताछ की सुविधा के लिए मैं अभी भी एक अलग टेबल में बाल रिकॉर्ड स्टोर करता हूं। सुझाव का एक गुच्छा धन्यवाद। – Mario

+0

टिप्पणी के लिए धन्यवाद। यह जानना अच्छा है कि मैं मदद कर रहा हूं! मैं अभी भी इस दृष्टिकोण का उपयोग बाल डेटा को स्टोर करने के लिए एक आसान तरीका के रूप में भी करता हूं। स्वीकृत उत्तर भी अच्छा है, खासकर यदि डेटा एक विस्तारणीय सूची दृश्य में प्रस्तुत किया गया है। – harmanjd

0

आप बच्चे को मेज के समग्र डेटा प्राप्त करना चाहते हैं, तो आप 'समूह द्वारा' एसक्यूएल statements.for उदाहरण के लिए, दो तालिकाओं में उपयोग करना चाहिए

select a.id,a.name,max(b.age) 
from parent as a inner join child as b on a.id=b.parentId 
group by a.id,a.name 
संबंधित मुद्दे