2012-08-08 7 views
5

मेरा ऐप SyncAdapter पैटर्न का उपयोग करता है, जिसमें AccountManager और ContentProvider का उपयोग करके उपयोगकर्ता क्रेडेंशियल्स को डीबी में डेटा स्टोर करने के लिए उपयोग किया जाता है।खाता हटाए जाने पर डेटाबेस को हटा रहा है

जब account हटा दिया जाता है तो मैं this question में बताए गए दृष्टिकोण का उपयोग करके डीबी को हटा सकता हूं। डीबी को हटाकर हटा दिया जाता है:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 

यह ठीक काम करता है लेकिन जब मैं लॉगिन करता हूं तो सब कुछ अभी भी वहां है। ऐसा लगता है कि ContentProvider को पता नहीं है कि डीबी हटा दिया गया है।

this answer में, inazaruk का कहना है:

आप सुनिश्चित करें कि आप प्रक्रिया है कि ContentProvider कि विशिष्ट डेटाबेस फ़ाइल का उपयोग करता है होस्ट करता है को मार डाला गया है बनाने की जरूरत है। और से इसे हटाएं।

डीबी को साफ़ करने की प्रक्रिया को मारना सही नहीं लगता है।

क्या कोई बेहतर काम है?

+0

उल्लेख डेटाबेस फ़ाइल क्यों हटाना चल रहा है और शायद पुरानी फाइल के लिए संदर्भ में एक ही उदाहरण है? डेटाबेस से डेटा को पर्याप्त नहीं हटा रहा है? – zapl

+0

@zapl: हाँ। मैं कुछ ऐसा कर सकता था जैसे 'टेबल से हटाएं;' – Macarse

उत्तर

2

तो मुझे लगता है कि मैं इसे निम्नलिखित तरीके से कोशिश करेंगे करना पड़ा था:

कुछ Uri जोड़ने है कि आप डालने या का उपयोग करते हुए कि Uri से चलाता है आपकी ContentProvider अंदर डेटाबेस विलोपन हटाना जब। जब SQLiteDatabase के सभी संदर्भों को भी हटाते हैं, तो यह संभव है कि आप अभी भी पुरानी डेटाबेस फ़ाइल तक पहुंच सकें (यदि आप लिनक्स में एक फ़ाइल हटाते हैं और आपके पास वह फ़ाइल खुलती है तो भी आप इसका उपयोग कर सकते हैं - यह अब तक पहुंच योग्य नहीं है राह)।

ContentProvider के अंदर हटाने को डालने से आप डेटाबेस कनेक्शन को बंद करने और हटाने की स्थिति को ट्रैक करने में सक्षम होना चाहिए जिससे आप जानते हैं कि आपको डेटाबेस फ़ाइल को फिर से बनाने की आवश्यकता है।

ContentProviders छोड़ने नहीं है जब तक आप अपने एप्लिकेशन को समाप्त तो आप शायद के रूप में ऊपर

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