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

问题描述 投票:0回答:7

如何获取

SharedPreferences
中的所有键,而不是仅获取首选项的值?

prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
android android-preferences
7个回答
211
投票

SharedPreferences
具有返回
getAll()
的方法
Map<String, ?>
。从映射中,您可以使用
keySet()
轻松检索键,并使用
entrySet()
检索键/值映射:

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

19
投票

您可以使用 SharedPreferences 的 getAll() 方法并获取 Map 中的所有值,然后您可以轻松地迭代它们:

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

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

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


15
投票

使用android.content.SharedPreferences

getAll()
方法。

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

8
投票

Kotlin 将允许您使用 Map 只需一行即可获取所有 SharedPreferences 键。

干杯伙计🎉

val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>

6
投票

在阅读了 @Delacrix 回复并使用 Kotlin 方式(在 Kotlin 1.3.11 中测试)检索密钥后,我发现了一个更短的版本来获取密钥(甚至是值):

val sharedPreferences = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>

同样的方式,您只能通过

sharedPreferences.all.values
访问值(即使这不是您在问题中询问的内容,可能对其他读者有用)。


5
投票

查看下面的代码

getAll()
方法

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

3
投票

虽然@Blackbelt的回答在这里很受欢迎,但我认为它实际上并没有针对这个问题。 (这并不奇怪,因为这个问题混淆了首选项名称和键的术语。)我想问题是如何找出已创建的共享首选项实例 - 如果名称是动态创建的,这可能会很有趣。

这里有两个策略:

  • 创建另一个共享首选项“元”实例,其中所有创建的共享首选项实例都是通过将键/值对添加到元首选项来注册的 - 键是共享首选项名称,值是任何值,例如

    true

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

    要获取您创建的所有共享首选项,请使用元首选项并按照@Blackbelt的答案进行操作。

  • 共享首选项有一个备份文件,该文件存储在名为

    /data/data/YOUR_PACKAGE_NAME/shared_prefs
    的文件夹
    YOUR_PREFS_NAME.xml
    中 因此,您可以在该目录中查找共享首选项文件。但要小心,可能存在不是由您的逻辑创建的共享首选项文件!因此我会坚持第一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.