साझा प्राथमिकताओं के सभी कुंजी के माध्यम से पुनरावृति कैसे करें?


79

SharedPreferences विधि getAll है, लेकिन यह इस तथ्य के बावजूद कोई प्रविष्टि नहीं देता है कि कुछ कुंजियाँ मौजूद हैं:

PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");

सच लौटाता है

Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();

खाली नक्शा देता है

गलत क्या है? सभी साझा प्राथमिकताओं की सूची कैसे प्राप्त करें?

जवाबों:


177

आप क्या कर सकते इस्तेमाल होता है getAll()की विधि SharedPreferencesऔर सभी मूल्यों को प्राप्त Map<String,?>है और फिर आप आसानी से के माध्यम से पुनरावृति कर सकते हैं।

Map<String,?> keys = prefs.getAll();

for(Map.Entry<String,?> entry : keys.entrySet()){
            Log.d("map values",entry.getKey() + ": " + 
                                   entry.getValue().toString());            
 }

अधिक के लिए आप कार्यान्वयन की जांच कर सकते हैं ।PrefUtil.java's dump()


3
यह मेरे लिए कोई मूल्य नहीं लौटा रहा है :(
अनिरुद्ध

3
getAll()NULLमान वापस कर सकते हैं । keysNULL के लिए जाँच करना बेहतर होगा ।
trante

3
NullPointerException को प्राप्त करने के entry.getValue()बजाय इसका बेहतर उपयोग है entry.getValue().toString())
व्लाद

8

मुझे लगता है कि प्रश्न का अधिक क्यों करना है

    PreferenceManager.getDefaultSharedPreferences(this).getAll()

मानक जावा मानचित्र पर पुनरावृति करने की तुलना में एक खाली / विरोधाभासी मानचित्र लौटा रहा है। एंड्रॉयड दस्तावेज़ वास्तव में क्रिस्टल यहाँ क्या हो रहा है के बारे में स्पष्ट नहीं है लेकिन मूल रूप से यह की तरह लगता है कभी पहली कॉल करने के लिए

    PreferenceManager.setDefaultValues(this, R.xml.preferences,false)

- जो कि आप अपने ऐप को शुरू करने पर वरीयताओं को इनिशियलाइज़ करने के लिए कहते हैं - आपकी प्राथमिकताओं के कुछ प्रकार के कैश्ड संस्करण बनाता है जो भविष्य में आपकी xml प्राथमिकताओं में परिवर्तन का कारण बनता है। आपके प्रश्न में वर्णित है।

इस "कैश्ड इकाई" को रीसेट करने के लिए, इन चरणों का पालन करें (जो आप उपरोक्त लिंक से आ सकते हैं):

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    prefs.edit().clear();
    PreferenceManager.setDefaultValues(this, R.xml.preferences, true);

समाधान मैं जरूरत क्या यह उत्तर और का एक संयोजन था stackoverflow.com/a/9310697/1815624
CrandellWS

4

कोई भी KOTLIN में साझाकरण के माध्यम से पुनरावृति करना चाहता है

 sharedPreferences?.all?.forEach {
     //access key using it.key & value using it.value
     Log.d("Preferences values",it.key() + ": " + it.value()             
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.