2011-05-25 11 views
13

मैं उपयोगकर्ता को SharedPreferences फ़ाइलों को बनाने की अनुमति दे रहा हूं, लेकिन मैं इन फ़ाइलों को हटाने के लिए भी विकल्प चाहूंगा। मुझे पता है कि मैं आंतरिक भंडारण का उपयोग कर सकता हूं, लेकिन यह मेरा सवाल नहीं है।साझा किए गए संदर्भ फ़ाइल हटाएं

मेरा प्रश्न है: "मैं SharedPreferences फ़ाइल को कैसे हटा सकता हूं (केवल स्पष्ट नहीं)?"

+2

आप स्पष्ट() विधि की कोशिश किया। मुझे लगता है कि यह वास्तव में साझा वरीयता में संग्रहीत सभी मूल्यों को हटाने के लिए है। तो एक बार जब आप प्रदान करते हैं कि आपके उपयोगकर्ताओं को साझा वरीयता के डिफ़ॉल्ट मान प्रदान किए जाएंगे। –

+1

'clear()' फ़ाइल को साफ़ कर देगा, लेकिन फ़ाइल सिस्टम से फ़ाइल को नहीं हटाएगा। एक खराब डिजाइन किए गए ऐप (जैसे मेरा) अंतरिक्ष लेने के लिए कई खाली फ़ाइलों के साथ समाप्त हो सकता है। @ किरील और @ इनजारुक की विधि मेरे लिए काम करती प्रतीत होती है। –

उत्तर

30

यदि आपको उदाहरण Context.getSharedPreferences("X") के माध्यम से मिलता है, तो आपकी फ़ाइल का नाम X.xml होगा।

यह /data/data/com.your.package.name/shared_prefs/X.xml पर स्थित होगा। आप उस फ़ाइल को उस स्थान से हटा सकते हैं। /data/data/com.your.package.name/shared_prefs/X.bak फ़ाइल भी देखें, और यदि यह मौजूद है, तो इसे भी हटाएं।

लेकिन ध्यान रखें, SharedPreferences उदाहरण स्मृति में सभी डेटा सहेजता है। तो आपको पहले वरीयताओं को साफ़ करने, परिवर्तन करने की आवश्यकता होगी और केवल वरीयताओं का समर्थन करने वाली फाइलों को हटा दें।

यह आपके डिजाइन निर्णय को लागू करने के लिए पर्याप्त होना चाहिए।

+0

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

+5

हां, यह कुछ समय के लिए स्मृति में डेटा रख सकता है। यह पता लगा सकता है कि फ़ाइल हटा दी गई थी और खुद को साफ़ कर दिया गया था, लेकिन मैं उस पर भरोसा करने की अनुशंसा नहीं करता। फ़ाइलों को हटाने के लिए दस्तावेज़ीकरण देखें: http://developer.android.com/reference/java/io/File.html#File%28java.lang.String%29। यह काफी आसान है: 'फ़ाइल फ़ाइल = नई फ़ाइल ("/ डेटा/डेटा /.../ साझा_prefs/X.xml");' और फिर 'file.delete(); ' – inazaruk

+0

ओह कमाल, यह आसान है। धन्यवाद । – Andrew

17

यहाँ इकाई-परीक्षण

public static void clearSharedPreferences(Context ctx){ 
    File dir = new File(ctx.getFilesDir().getParent() + "/shared_prefs/"); 
    String[] children = dir.list(); 
    for (int i = 0; i < children.length; i++) { 
     // clear each of the prefrances 
     ctx.getSharedPreferences(children[i].replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit(); 
    } 
    // Make sure it has enough time to save all the commited changes 
    try { Thread.sleep(1000); } catch (InterruptedException e) {} 
    for (int i = 0; i < children.length; i++) { 
     // delete the files 
     new File(dir, children[i]).delete(); 
    } 
} 

ध्यान दें कि का उपयोग करते समय आप उपयोग कर रहे एंड्रॉयड इकाई परीक्षण के लिए है के लिए किसी दिए गए संदर्भ के लिए सभी SharedPreferences, उपयोगी स्पष्ट करने के लिए एक आसान तरीका है। और आप Application कक्षा में साझा संदर्भों का उपयोग करते हैं, इससे दौड़ की स्थिति हो सकती है, और यह ठीक से काम नहीं कर सकता है।

+1

सबसे अच्छा जवाब जो मुझे अब तक मिला है –

2

इसका सरल प्रतिभा!

आपका डिफ़ॉल्ट एसडी कार्ड वरीयता.एक्सएमएल फ़ाइल पथ हो सकता है: /डेटा/डेटा/आपका पैकेज नाम/साझा_prefs/आपकी साझा वरीयता xml फ़ाइल

जैसे /data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml

नष्ट वरीयता xml फ़ाइल:

File deletePrefFile = new File("/data/data/com.hirecraft.hirecraftmanager/shared_prefs/swipe_preferences.xml"); 
deletePrefFile.delete(); 

या की तरह स्ट्रिंग में फ़ाइल पथ मिलता है,

String filePath = getApplicationContext().getFilesDir().getParent()+"/shared_prefs/swipe_preferences.xml"; 
File deletePrefFile = new File(filePath); 
deletePrefFile.delete(); 
+0

दूसरा विकल्प गलत है। getAplicationContext()। getFilesDir()। getPath() + "/" + "shared_prefs//data/data/com.hirecraft.hirecraftmanager/files/shared_prefs/swipe_preferences.xml !!! साझा_prefs फ़ोल्डर फ़ाइलों फ़ोल्डर के अंतर्गत नहीं है दूसरे विकल्प के लिए डाउनवोट। – goseib

+0

दूसरा विकल्प गलत है। GetAplicationContext()। GetFilesDir()। GetPath() + "/" + "shared_prefs//data/data/com.hirecraft.hirecraftmanager/files/shared_prefs/ swipe_preferences.xml !!! Shared_prefs फ़ोल्डर फाइल फ़ोल्डर के अंतर्गत नहीं है। GetParent() के साथ getPath() को बदलें। अपने असभ्य दृष्टिकोण के कारण डाउनवोट! – goseib

3
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     context.deleteSharedPreferences(preferencesKey); 
} else { 
    try { 
     FileUtils.cleanDirectory(new File(context.getCacheDir().getParent() + "/shared_prefs/")); 
    } catch (IOException e) { 
     Log.e(TAG, "Cannot delete files in shared pref directory", e); 
    } 
} 
संबंधित मुद्दे