2012-08-22 9 views
33

जैसा कि शीर्षक कहता है, मैं कुछ तारों को सहेजना और पुनर्प्राप्त करना चाहता हूं। लेकिन मेरा कोड पहली पंक्ति के माध्यम से नहीं मिलेगा न तो पुनर्प्राप्त या स्टोर में। मैं इस लिंक का अनुसरण करने की कोशिश की: http://developer.android.com/guide/topics/data/data-storage.htmlएंड्रॉइड - साझा प्राथमिकताओं के साथ तारों को संग्रहित/पुनर्प्राप्त करना

private void savepath(String pathtilsave, int i) { 
    String tal = null; 
    // doesn't go past the line below 
    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
    tal = String.valueOf(i); 
    editor.putString(tal, pathtilsave); 
    editor.commit(); 
} 

और मेरे पुनः प्राप्त विधि:

public void getpaths() { 
    String tal = null; 
    // doesn't go past the line below 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    for (int i = 1; i <= lydliste.length - 1; i++) { 
     tal = String.valueOf(i); 
     String restoredText = settings.getString(tal, null); 
     if (restoredText != null) { 
      lydliste[i] = restoredText; 
     } 
    } 
} 

lydliste एक स्थिर स्ट्रिंग सरणी है।

final SharedPreferences settings = context.getSharedPreferences(
      PREFS_NAME, 0); 

return settings.getString(key, null); 
+0

इसे देखें। http://stackoverflow.com/a/11894634/614807 –

+0

एक अच्छी [लाइब्रेरी] (https://github.com/frankiesardo/icepick) है जो आपको कुछ बोइलरोडोड बचाती है, अगर आप केवल एक ही मूल्य को स्टोर और पुनर्स्थापित करते हैं विशेष गतिविधि – Templum

उत्तर

3

मैंने इसे हल किया! जब मैंने कक्षा के भीतर से विधियों को बुलाया तो यह काम नहीं किया! मुझे किसी कारण से इसे किसी अन्य वर्ग से कॉल करना था, और "classname.this" को संदर्भ पैरामीटर के रूप में लिखना था। यहाँ अंतिम काम कर रहे है:

SharedPreferences settings = ctx.getSharedPreferences(PREFS_NAME, 0); 
    settings = ctx.getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString(tal, pathtilsave); 
    editor.commit(); 
2

संदर्भ के साथ प्रयास है

PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL", "defaultStringIfNothingFound"); 

context कहां है आपकी प्रसंग।


यदि आपको कई मान मिल रहे हैं, तो यह एक ही उदाहरण का पुन: उपयोग करने के लिए और अधिक कुशल हो सकता है।

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
String myStrValue = prefs.getString("MYSTRLABEL", "defaultStringIfNothingFound"); 
Boolean myBoolValue = prefs.getBoolean("MYBOOLLABEL", false); 
int myIntValue = prefs.getInt("MYINTLABEL", 1); 

और आप एक से अधिक मान की बचत कर रहे हैं:

Editor prefEditor = PreferenceManager.getDefaultSharedPreferences(context).edit(); 
prefEditor.putString("MYSTRLABEL", "myStringToSave"); 
prefEditor.putBoolean("MYBOOLLABEL", true); 
prefEditor.putInt("MYINTLABEL", 99); 
prefEditor.apply(); 

नोट:apply() साथ सहेजा जा रहा है commit() का उपयोग कर से बेहतर है। आपको केवल commit() की आवश्यकता है, यदि आपको रिटर्न वैल्यू की आवश्यकता होती है, जो बहुत दुर्लभ है।

+0

यह पुनर्प्राप्ति-भाग के लिए काम करने लगती है, लेकिन यह सुनिश्चित करना मुश्किल है क्योंकि मैंने कुछ भी संग्रहित नहीं किया है। अभी भी भंडारण के साथ परेशानी हो रही है। हालांकि इसके लिए धन्यवाद! – Rad

68

प्राथमिकताओं के सहेजने के लिए::

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL", "myStringToSave").apply(); 

एक संग्रहीत वरीयता प्राप्त करने के लिए: PREFS_NAME

public static final String PREFS_NAME = "MyPrefsFile"; 
+1

@ डायनासोर आप संभवत: 'getBaseContext()' या किसी गतिविधि के भीतर समान विधियों के साथ 'संदर्भ' को प्रतिस्थापित कर सकते हैं। यदि आप किसी ऑब्जेक्ट क्लास के भीतर हैं, तो संभवतः आपने इसे 'सामग्री' पैरामीटर के साथ शुरू किया है, जिसमें आप इसे सृजन पर वैश्विक वैरिएबल के रूप में घोषित कर सकते हैं और इसका उपयोग यहां कर सकते हैं। – Doomsknight

+0

हम्म। स्पष्ट रूप से कुछ ऐसा है जो मुझे अभी नहीं मिल रहा है। मैंने लिखने की कोशिश की है: PreferencesManager.getDefaultSharedPreferences (getBaseContext())। संपादित करें()। PutString (tal, pathtilsave) .commit(); और मैंने अपनी विधि को बदलने की कोशिश की है: निजी शून्य बचतपथ (संदर्भ संदर्भ, स्ट्रिंग पथटिलसेव, int i) पैरामीटर के रूप में "यह" संदर्भ के साथ। अभी भी काम नहीं करता है। गलत कर रहे हो? – Rad

+0

@ डायनासोर यह कितना दूर है? क्या आप सुनिश्चित हैं कि यह 'pathtilsave' शून्य नहीं है? मेरे उदाहरण में चर जैसे हार्डकोडिंग का प्रयास करें, और देखें कि यह काम करता है या नहीं। यदि ऐसा होता है, तो यह आपके पैरामीटर होना चाहिए। – Doomsknight

6
private static final String PREFS_NAME = "preferenceName"; 

public static boolean setPreference(Context context, String key, String value) { 
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString(key, value); 
    return editor.commit(); 
} 

public static String getPreference(Context context, String key) { 
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    return settings.getString(key, "defaultValue"); 
} 
+0

'साझा संदर्भ सेटिंग्स = c.getSharedPreferences (PREFS_NAME, 0); सेटिंग्स = c.getSharedPreferences (PREFS_NAME, 0); ' दूसरी पंक्ति अनावश्यक नहीं है? बीटीडब्ल्यू, मैंने इसे अब संपादित किया – eRaisedToX

+0

@eRaisedToX आप बिल्कुल सही हैं। आपका संपादन किसी भी तरह से खारिज कर दिया गया था, इसलिए मैं आगे बढ़ गया और जवाब स्वयं संपादित किया, और कुछ और सुधार किए। –

0

SharedPreferences वर्ग आप एक Android आवेदन के लिए विशिष्ट वरीयताओं को बचाने के लिए अनुमति देता है।

एपीआई संस्करण 11 पेश किए गए तरीकों को putStringSet और getStringSet पेश करता है जो डेवलपर को स्ट्रिंग मानों की एक सूची संग्रहीत करने और क्रमशः स्ट्रिंग मानों की एक सूची पुनर्प्राप्त करने की अनुमति देता है।

SharedPreferences का उपयोग कर तार की एक सरणी के भंडारण का एक उदाहरण तो की तरह किया जा सकता है:

// Get the current list. 

SharedPreferences settings = this.getSharedPreferences("YourActivityPreferences", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = settings.edit(); 
Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>()); 

// Add the new value. 

myStrings.add("Another string"); 


// Save the list. 
editor.putStringSet("myStrings", myStrings); editor.commit(); 
+0

फिर आप setText() का उपयोग करके इसे टेक्स्टव्यू में कैसे सेट करते हैं; ?? –

3

आप प्रतिबद्ध की वापसी मान के बारे में परवाह नहीं है() बेहतर उपयोग लागू() के रूप में यह अतुल्यकालिक किया जा रहा है तेज है कि प्रतिबद्ध()

final SharedPreferences prefs = context.getSharedPreferences("PREFERENCE_NAME", 
       Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putString("key", "value"); 
editor.apply(); 

के अनुसार docs

विपरीत प्रतिबद्ध() है, जो स्थायी संग्रह में बाहर अपनी वरीयताओं को लिखते हैं तुल्यकालिक, लागू() तुरंत में स्मृति SharedPreferences करने के लिए अपने परिवर्तन करता है, लेकिन शुरू होता है एक अतुल्यकालिक के लिए प्रतिबद्ध डिस्क और आपको किसी भी विफलताओं की अधिसूचना नहीं दी जाएगी। यदि इस साझा किए गए संदर्भों पर कोई अन्य संपादक एक नियमित प्रतिबद्धता() लागू करता है() अभी भी बकाया है, तो प्रतिबद्धता() तब तक अवरुद्ध हो जाएगी जब तक सभी एसिंक काम पूरा नहीं हो जाते हैं और साथ ही प्रतिबद्ध भी होते हैं।

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