2012-02-21 5 views
21

मैं बस उत्सुक हूं।जब getDefaultSharedPreferences का उपयोग करें और getSharedPreferences

1. getPreferenceManager().setSharedPreferencesName(String PrefName); 

2. PreferenceManager.getDefaultSharedPreferences(Context context) 

3. Context.getSharedPreferences (String name, int mode) 

मुझे पता है के रूप में, तीसरी विधि केवल जब पहली विधि प्रयोग किया जाता है, सही प्रयोग किया जाता है: वहाँ 3 विधि कर रहे हैं? लेकिन 3 विधि के साथ हम addPreferencesFromResource(int resID) का भी उपयोग करते हैं; तो, क्या अंतर है? हम इन तरीकों में से एक का उपयोग कब कर सकते हैं? धन्यवाद!

उत्तर

23

के एक समय में एक कदम चलते हैं:

  1. setSharedPreferencesName() विधि है कि बाद में उपयोग के लिए वरीयता समूह का नाम स्थापित करने के लिए अनुमति देता है। addPreferencesFromResource() पर कॉल करके XML संसाधन फ़ाइल से वरीयताओं को लोड करने से पहले प्राथमिकताएं के सहायक वर्ग का उपयोग करते समय यह सहायक है। इसलिए यह ऊपर वर्णित अन्य 2 विधियों के समान नहीं है।

  2. getDefaultSharedPreferences() डिफ़ॉल्ट नाम का उपयोग करता है, आमतौर पर /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml के रूप में संग्रहीत किया जाता है। इसका उपयोग आमतौर पर किया जाता है। ध्यान दें कि यह डिफ़ॉल्ट प्रति अनुप्रयोग सेट है।

    वैकल्पिक विधि - getSharedPreferences() को एक विशिष्ट प्राथमिकता (फ़ाइल) नाम और एक ऑपरेशन मोड इंगित करने की आवश्यकता है।

  3. another answer about shared preferences में भी प्रतीत होता है के रूप में, getDefaultSharedPreferences() वास्तव में Context.getSharedPreferences का उपयोग करता है, तो परिणाम एक ही है, लेकिन बिना flexbility कई वरीयता फ़ाइलों को विभाजित करने के लिए, कि getSharedPreferences() द्वारा की पेशकश की है। का उपयोग कर ऐप्स के बीच वरीयताओं को साझा करना MODE_WORLD_READABLE ऑपरेशन संकेतक getSharedPreferences() का उपयोग करके कुछ भी संभव है, लेकिन शायद ही कभी इसका उपयोग किया जाता है।

IMHO, getDefaultSharedPreferences() सुरक्षित रूप से एक से अधिक फ़ाइल वरीयता ऐसे नाम हैं जो लिखने की त्रुटियों और भ्रम की स्थिति से ग्रस्त हैं के भ्रम में जाने के बिना इस्तेमाल किया जा सकता।

किसी getSharedPreferences() और नहीं getDefaultSharedPreferences उपयोग करने के लिए एक अच्छा कारण के जानता है(), मुझे यहाँ टिप्पणी करके हमें बताएं।

+1

मुख्य अंतर मदद मिल सकती है (getDefaultSharedPreferences getSharedPreferences बनाम) है बदलना पड़ा - अगर आप किसी भी बदल चाहते हैं getDefaultSharedPreferences में वरीयता मान तब प्रतिबद्ध() के बजाय लागू() का उपयोग करें, यदि आप getDefaultSharedPreferences में प्रतिबद्धता का उपयोग करते हैं तो यह कभी भी प्रभाव नहीं डालता है .... मैंने इस मूर्खतापूर्ण गलती के लिए 2 घंटे और अधिक खर्च किया है, तो मैं बस यहां उल्लेख करें। –

1

getDefaultSharedPreferences()"com.example.something_preferences" जैसे डिफ़ॉल्ट वरीयता-फ़ाइल नाम का उपयोग करता है। यह डिफ़ॉल्ट आवेदन प्रति सेट कर दिया जाता है, तो एक ही एप्लिकेशन संदर्भ में सभी गतिविधियों निम्न उदाहरण में आसानी से इसे उपयोग कर सकते हैं:

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this); 
if (spref.contains("email")) { 
    String sEmailAddr = spref.getString("email", ""); 
} 

वरीयताओं आमतौर पर /data/data/com.package.name/shared_prefs पर जमा हो जाती है /com.package.name_preferences।क्योंकि getDefaultSharedPreferences का उपयोग कर कुछ खामियां है

  1. वास्तव getDefaultSharedPreferences कुछ उपकरणों पर सही काम नहीं करता है जब targer एपीआई 13
  2. साथ निर्माण शॉर्टकट से और से एप्लिकेशन को शुरू एक्सएमएल

    getSharedPreference सबसे अच्छा तरीका है मेनू मुझे अलग DefaultSharedPreferences देता है। मेरे कोड से DefaultSharedPreferences को हटाने के बाद - यह सही काम करता है। मैं सिर्फ यह नहीं कह सकते: लोग न shrotcuts बनाने, तो मैं कोड

यह link भी

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