2014-06-18 9 views
6

मुझे यहां सभी उत्तरों मिल गए और सभी समाधानों का प्रयास किया, फिर भी मेरे साझा किए गए prefs लगातार नहीं हैं।ऐप पुनरारंभ करने के बाद साझा प्राथमिकताएं

public static void setActivated(boolean activated) { 
    SharedPreferences sp = Utils.getContext().getSharedPreferences(
      USER_PREFS, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sp.edit(); 
    editor.putBoolean(ASD, activated); 
    editor.commit(); 
} 

public static boolean isActivated() { 
    SharedPreferences sp = Utils.getContext().getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE); 
    return sp.getBoolean(ASD, true); 
} 

मैं भी कोशिश की है:

यहाँ मेरी कोड है

editor.clear(); 
editor.put .. 
editor.commit(); 

मैं भी

editor.apply(); 

मैं भी .apply दोनों के साथ करने की कोशिश की साथ की कोशिश की है() और .commit() और कोई भाग्य नहीं है।

एक और विचार फ़ाइलों के लिए एक अलग विधा का उपयोग कर प्रयास करने के लिए किया गया था:

...getSharedPreferences(USER_PREFS, Context.MODE_MULTI_PROCESS); 

समस्या यह है कि मूल्यों को बचाया लगातार नहीं हैं। अगर मैं ऐप बंद करता हूं और फिर इसे फिर से खोलता हूं तो मान सभी गलत होते हैं।

क्या किसी के पास कोई विचार है? मैं यह भी उल्लेख करता हूं कि समस्या केवल कुछ उपकरणों पर है, उदाहरण के लिए एचटीसी वन एस, सैमसंग गैलेक्सी एस 3 (मैंने एक अलग एस 3 पर परीक्षण किया और यह पूरी तरह से काम किया)।

संपादित करें: मैं एक बटन क्लिक श्रोता पर सहेजता हूं और कॉल करता हूं जब मैं खंड लोड करता हूं (ऑनव्यूक्रेटेड() के बाद)।

धन्यवाद!

+0

देखें इस एक: http: //stackoverflow.com/questions/23654853/radiobuttons-and-spinners-in-shared-preferences/23655104#23655104 –

+0

एक ही समस्या होने ... मैं समस्या यह है कि देखा है केवल तब होता है जब मैं ऐप को पुनरारंभ करता हूं, जबकि यह प्रक्रिया अभी भी जीवित है (डीडीएमएस के अनुसार) - इस मामले में ऐसा लगता है कि कुछ अलग वरीयता फ़ाइल का उपयोग किया जा रहा है। अगर मैं डीडीएमएस में प्रक्रिया को मारता हूं और बाद में पुनरारंभ करता हूं - कोई समस्या नहीं ... – Lez77

उत्तर

2
public abstract SharedPreferences.Editor clear() 

संपादक में एपीआई में जोड़ा गया स्तर 1 मार्क वरीयताओं से सभी मूल्यों हटाने के लिए। एक बार प्रतिबद्ध होने के बाद, केवल शेष प्राथमिकताएं कोई भी होगी जिसे आपने इस संपादक में परिभाषित किया है। ध्यान दें कि वरीयताओं पर वापस आने पर, स्पष्ट रूप से पहले किया जाता है, चाहे आप इस संपादक को पर विधियों को पहले या बाद में साफ़ करते हैं या नहीं।

रिटर्न एक ही संपादक ऑब्जेक्ट का संदर्भ देता है, ताकि आप श्रृंखला को एक साथ कॉल कर सकें।

मेरे उपयोगकर्ता वरीयताओं वर्ग में मैं कुछ अन्य तारों पर एक शून्य मान रही थी और मेरे कोड कुछ इस तरह था:

SharedPreferences sp = Utils.getContext() 
    .getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
if (session != null && !"".equals(session)) { 
    sessionId = session; 
    editor.putString(SESSION, sessionId).commit(); 
} else { 
    sessionId = null; 
    editor.clear().commit(); 
} 

editor.clear() मेरे सारे अन्य प्रतिबद्ध रीसेट करने गया था!

+0

यह कैसे मदद करता है? लेखक ने कहा कि उन्होंने संपादक के साथ और बिना कोशिश की थी। स्क्वायर()। मेरे पास संपादक को कॉल किए बिना भी एक ही समस्या है। स्क्वायर() ... – Lez77

1

हाय मुझे लगता है कि इसे काम करना चाहिए। समाशोधन काम नहीं करता है, तो आप दूसरा विकल्प की कोशिश कर सकते मेरी समाधान में विस्तृत रूप में:

आप 2 विकल्प हैं:

  1. गतिविधि के जीवन चक्र के दौरान साझा वरीयता मान प्राप्त करें।

  2. कॉल .clear से पहले .commit

मेरा उत्तर देखें:

Android Persistent Checkable Menu in Custom Widget After Reboot Android

0

मैं पता नहीं क्यों, लेकिन यह सिर्फ async कार्य के अंदर अपने वरीयता कोड डालकर काम कर रहा है :

prefss = getSharedPreferences(ACCOUNT_PREFS_NAME, MODE_MULTI_PROCESS); 
new AsyncSave(favNamesList).execute(); 
private static class AsyncSave extends AsyncTask<Void, Void, Boolean> { 
    String favNamesList; 

    AsyncSave(String favNamesList) { 
     this.favNamesList = favNamesList; 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     prefss.edit().putString("favNamesList", strings).apply(); 
     return null; 
    } 
} 
संबंधित मुद्दे