2012-06-13 16 views
29

मेरे पुराने ऐप को अपडेट करने का प्रयास कर रहा है जिसमें कुछ विधियों को बहिष्कृत किया गया है। मुझे पता चला कि अगर मैं ListView के साथ काम करना चाहता हूं जो डीबी से डेटा दिखाता है, तो मुझे लोडरमैनेजर + कर्सर लोडर का उपयोग करना चाहिए। कर्सर लोडर सामग्री प्रदाताओं के साथ काम करता है। तो मेरे डीबी में प्रत्येक टेबल के लिए मुझे अब सामग्री प्रदाता बनाना चाहिए? मैं क्यों ? जहां तक ​​मुझे पता है कि सामग्री प्रदाताओं का उपयोग अन्य अनुप्रयोगों के साथ कुछ डीबी जानकारी साझा करने के लिए किया जाता है, लेकिन मेरा ऐप किसी भी जानकारी को साझा नहीं करता है। तो क्या मैं सामग्री प्रदाताओं के बिना कर्सर लोडर का उपयोग कर सकता हूं ???एंड्रॉइड: कर्सर लोडर, लोडर मैनेजर, SQLite

+2

विषय पर मेरी ब्लॉग पोस्ट देखें: [** 'लोडर प्रबंधक' ** को समझना (http://www.androiddesignpatterns.com/2012/05/why-you-should-use-loadermanager.html) –

+0

@Jim क्या सामग्री प्रदाता के साथ कोई समस्या है क्या आप मेरी मदद कर सकते हैं? –

उत्तर

22

मैंने इस विषय पर blog post लिखा है। अधिक जानकारी के लिए आप यह answer भी देख सकते हैं। उम्मीद है कि यह आपके लिए चीजों को साफ़ करेगा।

जैसा कि बराक ने उल्लेख किया है, कोई सामग्री प्रदाताओं के बिना AsyncTaskLoader<Cursor> कक्षा को बढ़ाकर लागू कर सकता है। उस ने कहा, अधिकांश ट्यूटोरियल और नमूना कोड ContentProvider एस का उपयोग करते हैं, और ऐसा लगता है कि एंड्रॉइड टीम इसके उपयोग को भी प्रोत्साहित करती है। यह आपकी अपनी कक्षा को लागू करने से भी बहुत कम जटिल है।

कहा कि, आप वास्तव में नहीं सामग्री प्रदाताओं उपयोग करना चाहते हैं, डायने Hackborn (एंड्रॉयड ढांचे डेवलपर्स में से एक है, और जिसे "hackbod" यहाँ इतने पर जाना जाता है) से पता चलता है अपने का उपयोग करता है अपने खुद के लोडर लेखन एक सामग्री प्रदाता के बजाय डेटाबेस वर्ग। सबसे आसान तरीका संगतता लाइब्रेरी से CursorLoader वर्ग का स्रोत लेना है, और प्रदाता प्रश्नों को अपने स्वयं के डीबी सहायक वर्ग में प्रश्नों के साथ प्रतिस्थापित करना है।

+2

मुझे लगता है कि यह उल्लेख करने योग्य है कि 'ContentProvider' का उपयोग केवल तभी प्रोत्साहित किया जाता है जब आप अन्य ऐप्स को डेटा प्रदान करने की योजना बनाते हैं। यदि आप नहीं करते हैं (यानी डेटा आपके ऐप के लिए निजी है), तो आपको सादे SQLite डेटाबेस का उपयोग करने के लिए प्रोत्साहित किया जाता है। अधिक जानकारी के लिए, [ContentProvider] (https://developer.android.com/reference/android/content/ContentProvider.html) के लिए दस्तावेज़ देखें। – Felix

+0

मुझे लगता है कि "संगतता लाइब्रेरी से कर्सर लोडर वर्ग का स्रोत लेना, और ..." सबसे अच्छा विकल्प है, है ना? – BornToCode

+0

मुझे 'ऑर्म्सलाइट' को संभालने के लिए अपनी कक्षा के साथ 'कर्सर लोडर' का विस्तार करना पड़ा। – theblang

0

हाँ आप कर सकते हैं, आपके पास कस्टम डेटा लोडर हो सकते हैं जो आपके द्वारा परिभाषित वस्तुओं को लोड कर सकते हैं या उस मामले में किसी ऑब्जेक्ट प्रकार या सूची को लोड कर सकते हैं।

संगतता लाइब्रेरी नमूने और डेमो में LoaderCustomSupport.java के लिए एंड्रॉइड एसडीके से नमूने देखें।

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