2012-03-13 14 views
33

सहेजने की प्राथमिकता साझा नहीं की है मैंने एक एंड्रॉइड लाइव वॉलपेपर बनाया है और मैं उपयोगकर्ता को अपने फोन से एक छवि चुनने और इसे पृष्ठभूमि छवि के रूप में लागू करने की कोशिश कर रहा हूं, लेकिन जब मैं उस गतिविधि को लॉन्च करता हूं जो इरादा शुरू करता है छवियों को चुनें, मेरी साझा प्राथमिकताएं ठीक से सहेजने लगती नहीं हैं।एंड्रॉइड साझा प्राथमिकताओं

नीचे मेरी गतिविधि पर शुरू होता है जब मैं वरीयता बटन दबाता हूं, और ऑनएक्टिविटी रिसेट जो डिवाइस पर छवि का पथ प्राप्त करता है (जो काम करता है)। प्राथमिकताएं करने के बाद println कुछ भी प्रिंट नहीं करता है।

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, SELECT_PICTURE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 

      preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); 
      preferences.edit().putString(SETTINGS_BACKGROUND_IMAGE, "okok"); 
      preferences.edit().commit(); 

      System.out.println("Image" + preferences.getString(SETTINGS_BACKGROUND_IMAGE, "")); 
     } 
    } 

    finish(); 
} 

उत्तर

76
documentation से

:

इन वरीयताओं को, जिसके माध्यम से आप वरीयताओं में आंकड़ों के संशोधन कर सकता है और atomically उन परिवर्तनों को वापस करने के लिए प्रतिबद्ध SharedPreferences आपत्ति के लिए एक नया संपादक बनाएँ।

के बाद से है कि एक नए संपादक उदाहरण है, अपने कोड होना चाहिए इस तरह अधिक:

SharedPreferences sf = PreferenceManager.getDefaultSharedPreferences(this); 

तुम भी करने के लिए लिख श्रृंखला कर सकते हैं:

preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok"); 
editor.commit(); 
+16

मैं केवल एक है जो इस और मूल कोड के बीच तर्क में अंतर नहीं देख सकता हूँ? – josephus

+35

जब आप वरीयताओं को कॉल करते हैं .edit(), आपको एक संपादक उदाहरण मिलता है, जिस पर jOE स्ट्रिंग डाल रहा था, लेकिन उसके बाद, उस उदाहरण का अब उपयोग नहीं किया गया था (इस प्रकार खो गया, और संभवतः कचरा एकत्रित किया गया था)। फिर, जोई ने प्राथमिकताएं .edit() को फिर से बुलाया, एक और संपादक उदाहरण प्राप्त करना जिसमें प्रारंभिक सेटिंग्स शामिल हैं, जिन्हें उन्होंने अभी स्थान पर सहेजा था। यह मूल रूप से प्रारंभिक सेटिंग्स को सहेजा गया (अपनी साझा वरीयताओं को अपडेट करने के लिए कुछ भी नहीं किया) – zrgiu

+1

zrgui, आपकी मदद के लिए बहुत बहुत धन्यवाद! आपका सुझाव पूरी तरह से काम किया! – jOE

13

अपने SharedPreferences चर आरंभ का एक और तरीका का प्रयास करें एसएफ sf.edit().putString(string, value).commit();

+1

मैं अब और श्रृंखला नहीं लेना चाहता हूं। –

+4

मैं एक खिलाड़ी नहीं हूं, मैं सिर्फ बहुत कुछ हूं ... –

1

मेरे मामले में मुझे editor.apply() जोड़ना पड़ा; काम करने के लिए प्रतिबद्ध करने से पहले।

यह मेरा कोड है:

preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok"); 
editor.apply();//I added this line and started to work... 
editor.commit(); 
+2

लागू होता है डेटा को एक सिंक्रोनिक रूप से सहेजने के लिए, जबकि इसे तुरंत सहेजना है, आपको इन दोनों का उपयोग नहीं करना चाहिए !!! – XcodeNOOB

0

अच्छी तरह से, @zrgiu पोस्ट के आधार पर है, मेरे लिए केवल संपादक उपयोग करने से पहले editor.clear(); जोड़ना काम ... इसलिए अंतिम कोड होगा कुछ की तरह:

preferences = getApplicationContext().getSharedPreferences(PREFERENCES_NAME, 0); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.clear(); 
editor.putString(SETTINGS_BACKGROUND_IMAGE, "okok"); 
editor.commit(); 

;)

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

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