How to get all keys of SharedPreferences programma

2019-01-30 08:21发布

How to get all keys in SharedPreferences, not the value of the preference just key only?

prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);

6条回答
▲ chillily
2楼-- · 2019-01-30 08:24

Kotlin will allow you to get all your SharedPreferences keys with just one line by using Map.

Cheers mate

查看更多
Ridiculous、
3楼-- · 2019-01-30 08:25

Check out the below code for getAll() method

Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
    Log.v("SharedPreferences", entry.getKey() + ":" + 
entry.getValue().toString());
}
查看更多
做自己的国王
4楼-- · 2019-01-30 08:29

Although @Blackbelt's answer is quite popular here, I think it is not actually targeting the question. (It is not suprising since the question mixes up the terminology of preferences names and keys.) I guess the question is how to find out which shared preferences instances have been created - which can be of interest if the names are created dynamically.

Here are two strategies for that:

  • create another shared preferences "meta" instance where all created shared prefences instances are registered by adding a key/value pair for it to the meta prefs - with the key being the shared prefences name and the value being any value e.g. true.

    getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
        .edit().put*(*).apply();
    getSharedPreferences( "meta_prefs_index", 0 )
        .edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
    

    To obtain all shared prefences created by you, use the meta prefs and follow the answer of @Blackbelt.

  • shared preferences have a backup file, which is stored in folder /data/data/YOUR_PACKAGE_NAME/shared_prefs with name YOUR_PREFS_NAME.xml So you can look into that directory for your shared preferences files. But be careful, there might be shared preferences files that were not created by your logic! Therfore I would stick with the first approach.

查看更多
太酷不给撩
5楼-- · 2019-01-30 08:32

Use the getAll() method of android.content.SharedPreferences.

Map<String, ?> map = sharedPreferences.getAll();
查看更多
混吃等死
6楼-- · 2019-01-30 08:37

What you can do is use getAll() method of SharedPreferences and get all the values in Map and then you can easily iterate through them:

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

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

For more, you can check PrefUtil.java's dump() implementation with this link.

查看更多
爷的心禁止访问
7楼-- · 2019-01-30 08:48

SharedPreferences has the method getAll() that returns a Map<String, ?> . From the Map you can retrieve easily the keys with keySet() and the key/value mappings with entrySet():

Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
    Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
} 
查看更多
登录 后发表回答