2016-11-25 13 views
5

का उपयोग करते समय डेटाबेस को पुन: बनाएँ डेटाबेस में मेरा एंड्रॉइड ऐप एक SQLite डेटाबेस और सामग्री प्रदाता है। यह सामग्री प्रदाता ऐप के AndroidManifest.xml में पंजीकृत है। यह निर्यात नहीं किया जाता है, इसलिए केवल मेरा ऐप इसे देख सकता है।सामग्री प्रदाता

उपयोगकर्ता की प्रोफ़ाइल को रीसेट करने के हिस्से के रूप में, मैं इस डेटाबेस को पूरी तरह से मिटा देना चाहता हूं और इसे स्क्रैच से फिर से बनाना चाहता हूं। सबसे पहले मैंने गतिविधि के संदर्भ से deleteDatabase() पर कॉल करने का प्रयास किया। यह काम करता है, लेकिन केवल तभी जब ऐप बंद हो और बाद में फिर से खोल दिया जाए। अन्यथा जब मैं पंक्तियों को सम्मिलित करने का प्रयास करता हूं तो यह क्रैश हो जाएगा कि डेटाबेस केवल पढ़ने के लिए है। मेरी समझ यह है कि deleteDatabase() पर कॉल करने से पहले कनेक्शन को बंद करने की आवश्यकता है। फिर भी, कनेक्शन सामग्री प्रदाता द्वारा प्रबंधित किया जाता है और जहां तक ​​मैं समझता हूं, मैन्युअल रूप से बंद नहीं किया जाना चाहिए।

एक विकल्प के रूप में, मैं ContentResolver से call() विधि का उपयोग कर रहा हूं ताकि एक कस्टम फ़ंक्शन को कॉल किया जा सके जो तालिका में सभी डेटा हटा देगा और अनुक्रम गणना मैन्युअल रूप से रीसेट करेगा।

यह काम करता है, लेकिन अब मुझे मैन्युअल रूप से प्रत्येक तालिका से डेटा हटाना होगा और भविष्य में किए गए किसी भी बदलाव का ट्रैक रखना होगा।

मेरे DatabaseHelper (SQLiteOpenHelper) ट्रिगर की onCreate() जब एक ContentProvider का उपयोग कर पूरे डेटाबेस हटा सकते हैं और करने के लिए एक बेहतर तरीका है?

+0

आप क्यों पुन: बनाना चाहते हैं और न केवल सभी सामग्री को हटाएं? –

+0

@DiegoTorresMilano मुझे लगता है कि मैं बस प्रत्येक तालिका/पंक्ति को छोड़ने के बिना डेटाबेस को ताज़ा स्थिति में ताज़ा करने की कोशिश कर रहा हूं (इसलिए deleteDatabase को कॉल करने का प्रयास कर रहा हूं) और प्रारंभिक सेटअप प्रक्रिया को नए प्रोफाइल को फिर से कॉन्फ़िगर करने दें क्योंकि यह पहले चलाते हैं। वर्तमान में मैं डेटा की सभी पंक्तियों को हटा रहा हूं, अगर मैं डिलीटडेटा को कॉल करने के करीब कुछ था तो मैं उत्सुक हूं। – Programmer001

+0

आपको अभी भी खोले जाने पर फ़ाइल को हटाने की कोशिश नहीं करनी चाहिए। –

उत्तर

1

एक सुझाव जो दिमाग में आता है वह है कि आपका कस्टम फ़ंक्शन टेबल को छोड़ दें और उन्हें फिर से बनाएं। DatabaseHelper के onCreate() में टेबल बनाने के लिए आपके पास पहले से कोड है। इसे कहीं रिफैक्टर करें जो DatabaseHelper और कस्टम विधि दोनों के द्वारा सुलभ है।

+0

दाएं। डिलीटडेटाबेस काम नहीं करने के बाद, मैंने टेबल छोड़कर शुरू किया लेकिन फिर अपनी सभी पंक्तियों को हटाने का फैसला किया और क्रिएट को कॉल करने के बजाए अपनी अनुक्रम गणना को रीसेट कर दिया। आपका जवाब भी काम करेगा। थोड़ा और तर्क के लिए डिएगो को मेरा जवाब देखें। यदि कोई अन्य उत्तर नहीं है तो मैं इसे उत्तर के रूप में स्वीकार कर सकता हूं। – Programmer001

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