एंड्रॉइड में ऐप से साझा प्राथमिकताएं डेटा को कैसे हटाएं


478

मैं अपने आवेदन के लिए साझाकरण डेटा कैसे हटाऊं?

मैं एक एप्लिकेशन बना रहा हूं जो डेटा को सिंक करने के लिए बहुत सारी वेब सेवाओं का उपयोग करता है। परीक्षण के प्रयोजनों के लिए, मुझे ऐप को पुनः आरंभ करने पर कुछ साझाकरण मानों को मिटा देना होगा।

जवाबों:


870

विशिष्ट मानों को निकालने के लिए: SharedPreferences.Editor.remove () इसके बाद acommit()

उन सभी को हटाने के लिए SharedPreferences.Editor.clear()एक द्वारा पीछा कियाcommit()

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


268
संदर्भ.गेटशेयरिंग संदर्भ ("Your_PREFS", 0) .edit ()। स्पष्ट ()। प्रतिबद्ध; () // अपने सभी Prefs हटाएं :)
rubdottocom

2
@ जोशी निश्चित रूप से एक निष्कासन () के साथ-साथ एक स्पष्ट () भी है। आप विशिष्ट वरीयताओं को हटाने के लिए हटाने () का उपयोग करते हैं, आप उन सभी को हटाने के लिए स्पष्ट () का उपयोग करते हैं। मूल प्रश्न स्पष्ट नहीं था कि क्या उन सभी को हटाने की आवश्यकता है या नहीं।
मार्क बी

9
वरीयताओं को साफ़ करना फ़ाइल वास्तव में इसे हटाने के लिए प्रकट नहीं होती है। App Info पैनल में सूचीबद्ध "डेटा" का उपयोग करके अपने स्वयं के परीक्षणों में, एक नया SharedPreference फ़ाइल बनाना इस मान में 4KB जोड़ता है, लेकिन Editor.clear ()। प्रतिबद्ध () का उपयोग करके संख्या को कम नहीं करता है।
कोड कमांडर

2
@rubdottocom आप एक अलग उत्तर के रूप में अपनी टिप्पणी क्यों नहीं देते हैं?
टेक्नोफाइल

10
@rubdottocom का उपयोग बेहतर .apply () के बजाय .commit ()
जुआन एगुइलर गुइसाडो

173

मेरा समाधान:

SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();

2
क्या केवल चर को हटा दें?
Si8

3
@ SiKni8 हाँ, जो कुंजी के साथ केवल कुंजी / मान युग्म निकालता है "text"
डेनिस

मैं इसे काम करने में सक्षम था क्योंकि यह कुछ समय के लिए है, लेकिन प्रतिक्रिया के लिए धन्यवाद :)
Si8

आपने मेरी परम पवित्रता को बचा लिया। : पी थैंक यू। मैं एक समय में एक वस्तु के एक तत्व के लिए प्रीफ़ को साफ़ करने की कोशिश कर रहा था, और यह खूबसूरती से काम करता है।
अज़र्सपॉट

3
पृष्ठभूमि में कार्य करने के लिए प्रतिबद्ध () के बजाय लागू () का उपयोग करने पर विचार करें।
ज़ोन

124

सभी प्राथमिकताओं को हटाना:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();

एकल वरीयता निकालना:

SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();

1
क्या होगा KeyName?
hasnain_ahmad

2
पूरी वरीयता फ़ाइल को कैसे हटाया जाए, न कि फ़ाइल के अंदर वरीयताओं को?
श्रीकर रेड्डी

कार्य को पृष्ठभूमि थ्रेड में करने के लिए प्रतिबद्ध () के बजाय लागू करें () का उपयोग करें। प्रतिबद्ध () ब्लॉक और तुरंत भंडारण के लिए डेटा लिखें। लागू () अतुल्यकालिक है।
वैभव

64

यदि हर बार हटाया जाना आवश्यक नहीं है, तो आप इसे मैन्युअल रूप से हटा सकते हैं:

सेटिंग्स -> एप्लिकेशन -> एप्लिकेशन प्रबंधित करें -> (अपना ऐप चुनें) -> डेटा साफ़ करें या अनइंस्टॉल करें

Android के नए संस्करण:

सेटिंग्स -> एप्लिकेशन -> (अपना ऐप चुनें) -> स्टोरेज -> डेटा साफ़ करें और कैश साफ़ करें


5
क्या हम इस कार्यक्रम को कर सकते हैं।
अमित

@amity अन्य उत्तर इसे प्रोग्रामेटिक रूप से करता है।
प्रातः काल

31
गैर-प्रोग्रामेटिक विकल्प के लिए धन्यवाद।
कोरेथन

2
@amity - हम में से कुछ को इस उत्तर की आवश्यकता थी। मैं अनिश्चित था कि एंड्रॉइड एमुलेटर पर शेयर्डप्रिफ़ को कैसे हटाया जाए ताकि मैं अपने कोड का परीक्षण जारी रख सकूं।
टीजे बिडल

1
एंड्रॉयड स्टूडियो में नहीं 2.2.2 10/18/2016।
रॉबिन

26

एक पंक्ति में Android साझा प्राथमिकताएँ हटाना :-)

context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();

या applyगैर-अवरुद्ध अतुल्यकालिक ऑपरेशन के लिए:

this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();

मेरे लिए सबसे अच्छा समाधान। ऐसे कुछ मामले हैं जब सिंक्रोनस शेयर्स के लिए साझाकरण सामग्री है।
जुआन अगुइलर गुइसाडो

19

लगता है कि सभी समाधान पूरी तरह से काम या बाहर नहीं हैं

किसी गतिविधि में सभी साझाकरण को साफ़ करने के लिए

PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();

OnCreate के बाद मुख्य गतिविधि से इसे कॉल करें

नोट * मैं .apply()इसके बजाय इस्तेमाल किया .commit(), आप प्रतिबद्ध () का चयन करने के लिए स्वतंत्र हैं;


वास्तव में मुझे क्या चाहिए। धन्यवाद यह सभी डिफ़ॉल्ट वरीयताओं को साफ करता है
अर्पित पटेल

11

आप बिना रूट किए हुए फ़ोन के लिए भी ऐसा करने के लिए adb शेल का उपयोग कर सकते हैं। एकमात्र पकड़ यह है कि ऐप को डीबग करना होगा।

run-as <your package name> <command>

उदाहरण के लिए:

run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db

वैकल्पिक रूप से, आप बस उपरोक्त कर सकते हैं, लेकिन बिना कमांड जो आपको ऐप पैकेज रूट पर निर्देशित करेगा और आपको ऐप के संदर्भ में अधिक कमांड निष्पादित करने की अनुमति देगा।


1
पर उपयोगी टिप के लिए +1 run-as। आपको लगता है कि मुझे यह 3 साल बाद मिला होगा ...
रिचर्ड ले मेसुरियर

यह साझाकरण नहीं है, यह sqlite डेटाबेस है
OneCricketeer


9

एपीआई 24 (नौगाट) के अनुसार आप बस कर सकते हैं:

context.deleteSharedPreferences("YOUR_PREFS");

हालांकि, कोई पिछड़ी संगतता नहीं है, इसलिए यदि आप 24 से कम किसी चीज का समर्थन कर रहे हैं, तो इसके साथ रहें:

context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply(); 


8

आप अपने डिवाइस का उपयोग करके अपने ऐप को मैन्युअल रूप से अनइंस्टॉल भी कर सकते हैं। फिर जब आप अपने ऐप को फिर से इंस्टॉल करते हैं, तो साझा प्राथमिकताएं रीसेट हो जाती हैं।


धन्यवाद - मैं क्रमिक रूप से शेयर्स को हटाना नहीं चाहता था इसलिए मेरे लिए यह काम किया।
साइमन

मेरे डिवाइस पर मेरे पास अनइंस्टॉल विकल्प पर "डेटा साफ़" करने का विकल्प है, जिसने मेरे लिए काम किया और मेरे ऐप को फिर से स्थापित करने की आवश्यकता को हटा दिया।
जी ओ'रिला

8

कक्षा परिभाषाओं में:

private static final String PREFERENCES = "shared_prefs";

private static final SharedPreferences sharedPreferences  = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);

वर्ग के अंदर:

public static void deleteAllSharedPrefs(){
    sharedPreferences.edit().clear().commit();
}

7

इस कोड को आज़माएं:

SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();

5

यदि यह आपके परीक्षण के लिए है। आप adb कमांड का उपयोग कर सकते हैं।

adb shell pm clear <package name>

5
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();

यह "someTag" नाम के साथ साझा की गई प्राथमिकताओं को हटा देगा।


3
  • किसी विशेष मान को निकालने के लिए,

SharedPreferences.Editor remove (स्ट्रिंग कुंजी) के बाद एक कमिट () या एक आवेदन ()

  • सभी मानों को निकालने के लिए,

    SharedPreferences.Editor स्पष्ट () के बाद एक प्रतिबद्ध () या एक आवेदन ()


2

मुख्य मूल्य जोड़े को वरीयता से हटाने के लिए, आप आसानी से निम्नलिखित कर सकते हैं

getActivity().getSharedPreference().editor().remove("key").apply();

साझा प्राथमिकताओं के आसान हेरफेर के लिए मैंने पुस्तकालय भी विकसित किया है। आपको निम्न लिंक मिल सकता है

https://github.com/farruhha/SimplePrefs


2

किसी भी वर्ग से केंद्रशासित सभी साझाकरणों को साफ करने के लिए:

public static SharedPreferences.Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

और फिर किसी भी वर्ग से: (एक बूलियन लौटाता है जहां आप जांच सकते हैं कि आपकी वरीयताएँ साफ़ हुई हैं या नहीं)

Navigation.getEditor(this).clear().commit();

या आप आवेदन का उपयोग कर सकते हैं; यह शून्य है

Navigation.getEditor(this).clear().apply();

1
new File(context.getFilesDir(), fileName).delete();

मैं इसके साथ साझा प्राथमिकताओं में फ़ाइल को हटा सकता हूं


उपरोक्त सभी उपाय गलत हैं, साझा प्राथमिकताओं को हटाने के लिए केवल डिलीट फाइल ही सही है
ड्रीमर

1

जवाब में से कोई भी मेरे लिए काम नहीं करता है क्योंकि मेरे पास कई साझा प्राथमिकताएं हैं।

मान लीजिए कि आप एक इकाई परीक्षण के बजाय एक Android परीक्षण चला रहे हैं।

यह मेरे लिए काम कर रहा है और सभी साझा की गई फ़ाइलों के माध्यम से हटाएं ।

@BeforeClass सभी परीक्षणों और ActivityTestRule से पहले चलेगा

@BeforeClass
public static void setUp() {
    Context context = InstrumentationRegistry.getTargetContext();

    File root = context.getFilesDir().getParentFile();
    String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
    for (String fileName : sharedPreferencesFileNames) {
        context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
    }
}

0

Kotlin KTX के लिए रास्ता साफ़ प्राथमिकताएं:

val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
    clear()
}

उदाहरणों के साथ सभी साझा प्राथमिकताओं के संचालन के लिए यहां क्लिक करें


-2

आप preferences.edit().remove("key").commit()साझा प्राथमिकताओं से सहेजे गए मूल्यों को हटाने के लिए उपयोग कर सकते हैं।


-6

आज सुबह ही किया था। कमांड प्रॉम्प्ट से:

adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file

नोट : इसके लिए एक रूट किए गए डिवाइस की आवश्यकता होती है जैसे स्टॉक एंड्रॉइड वर्चुअल डिवाइस, एक जेनमोशन डिवाइस, या एक वास्तविक रूटेड हैंडसेट / टैबलेट, आदि।


9
तो जिस किसी ने भी इस समाधान को वोट दिया, उसे यह भी बताना चाहिए कि क्यों: आपको /data/dataसीधे एक्सेस करने के लिए एक रूट किए गए फोन की आवश्यकता है !
नुआला

3
आपको एप्लिकेशन को साझा करने के लिए SharedPreferences को निकालने की आवश्यकता है, न कि ADB शेल की। ​​यह प्रयोग करके किया जाता है: SharedPreferences.edit ()। clear ()। प्रतिबद्ध ();
thePunisher

यह पूछने पर कि उन्होंने कोई जड़ समाधान नहीं चाहा है। हालांकि यहां एक तकनीकी त्रुटि है; क्योंकि इस प्रक्रिया में जड़ की आवश्यकता है, तो आप को चलाने के लिए है suके बाद adb shellएक विशेषाधिकार प्राप्त खोल को खोलने के लिए।
अबियान नोब

इसे इतना नीचे क्यों उतारा गया? यह एक उपयोगी उत्तर है और जिसकी मुझे तलाश थी।
मैट डी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.