如何在Android中以编程方式获取SharedPreferences的所有密钥?

如何获得SharedPreferences所有密钥,而不是仅偏好密钥的值?

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

SharedPreferences有方法getAll() ,它返回一个Map<String, ?> 。 在Map中,您可以使用keySet()entrySet()轻松检索键和键/值映射:

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

你可以做的是使用SharedPreferences的getAll()方法并获得Map中的所有值,然后你可以很容易地迭代它们:

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

有关更多信息,可以使用此链接检查PrefUtil.java的dump()实现。

使用android.content.SharedPreferences的getAll()方法。

 Map<String, ?> map = sharedPreferences.getAll(); 

查看getAll()方法的下面的代码

 Map<String, ?> prefsMap = prefA.getAll(); for (Map.Entry<String, ?> entry: prefsMap.entrySet()) { Log.v("SharedPreferences", entry.getKey() + ":" + entry.getValue().toString()); } 

尽pipe@Blackbelt的回答在这里很受欢迎,但我认为这并不是针对这个问题。 (这个问题并不令人惊讶,因为这个问题混合了首选项名称和关键字的术语。)我想问的是如何找出哪些共享的首选项实例已经创build – 如果名称是dynamic创build的,可能会感兴趣。

这里有两个策略:

  • 创build另一个共享首选项“元”实例,其中所有创build的共享首选实例通过为元首选项添加一个键/值对来注册 – 密钥是共享前导名称,值是任意值,例如true

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

    要获得由您创build的所有共享的prefences,请使用meta首选项并按照@Blackbelt的答案。

  • 共享首选项有一个备份文件,它存储在名为YOUR_PREFS_NAME.xml文件夹/data/data/YOUR_PACKAGE_NAME/shared_prefs 。因此,您可以查看该共享首选项文件的目录。 但要小心,可能有共享的喜好文件,而不是由您的逻辑创build! 因此,我会坚持第一种方法。