如何将键值对存储在SharedPreferences中?

清扫器

我正在开发一个随机生成密码的应用程序。我正在添加“保存”功能,以便用户可以在中保存密码SharedPreferences(这不是您应该使用的密码)

我有一个名为的活动PasswordActivity,在该活动中,我将显示保存的密码。

这就是我保存密码的方式:我提示用户输入一个要输入的名称/密钥作为密码,以便他/她以后可以识别它。然后,使用实用程序类中的以下方法将密钥和密码保存在SharedPreferences中:

public static int savePassword (Context c, String passwordKey, String passwordValue) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (c);
    Set<String> keys = prefs.getStringSet (PASSWORD_KEYS, new HashSet<String> ());
    Set<String> values = prefs.getStringSet (PASSWORD_VALUES, new HashSet<String> ());
    SharedPreferences.Editor editor = prefs.edit ();

    boolean duplicateKey = !keys.add (passwordKey);
    boolean duplicateValue = !values.add (passwordValue);

    if (duplicateKey)
        return KEY_DUPLICATE;
    if (duplicateValue)
        return VALUE_DUPLICATE;

    editor.putStringSet (PASSWORD_KEYS, keys).
            putStringSet (PASSWORD_VALUES, values).apply ();

    return SUCCESS;
}

我写了另一种方法来获取密码及其名称。该方法将返回HashMap<String, String>您可能已经猜到的。

public static HashMap<String, String> getPasswords (Context c) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (c);
    Set<String> keys = prefs.getStringSet (PASSWORD_KEYS, new HashSet<String> ());
    Set<String> values = prefs.getStringSet (PASSWORD_VALUES, new HashSet<String> ());

    ArrayList<String> keysList = new ArrayList<> ();
    ArrayList<String> valuesList = new ArrayList<> ();

    for (String key : keys) {
        keysList.add (key);
    }

    for (String value : values) {
        valuesList.add (value);
    }

    HashMap<String, String> map = new HashMap<> ();

    for (int i = 0 ; i < keys.size () ; i++) {
        map.put (keysList.get (i), valuesList.get (i));
    }

    return map;
}

我承认代码很乱。首先,我将两个集合中ArrayList的东西都转换为s,然后将数组列表中的东西添加到映射中并返回。

那是很多工作!

现在,当用户生成密码并将其保存时,这两组密码包含正确的内容:(这些是伪造的数据)

键:
key1

值:
value1

很好 但是,当我生成另一个密码并将其保存时,这两个密码会变得混乱:

键:
key1 
key2

值:
value2 
value1

现在,当我调用该getPasswords方法时,它将返回

{key1, value2}, {key2, value1}

这是不正确的。查看文档后,我发现:

它不保证集合的迭代顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。

我猜这是导致错误结果的原因。

因此,我想知道是否还有另一种方式来存储这些密码及其名称?

月花

当您存储多个名称和密码时,我建议使用本地SQLite数据库。SharedPreferences用于单个值,而不是值集。

如果您不必费心设置整个SQLiteOpenHelper和所有原始SQL代码,则可以看看一些ORM帮助器,例如SugarOrm(我目前正在使用它,它的EXTREMELY易于设置和使用)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将ArrayList或HashMap存储到文件或SharedPreferences中?

来自分类Dev

如何将ArrayList <HashMap <String,String >>数据存储到sharedpreferences中?

来自分类Dev

如何使用python将键值对存储在Elasticsearch索引中

来自分类Dev

如何使用python将键值对存储在Elasticsearch索引中

来自分类Dev

如何将sharedpreferences文件从内部存储传输到外部存储?

来自分类Dev

如何将地图键值收集到列表中

来自分类Dev

如何将键值对添加到deedle系列中?

来自分类Dev

如何将数组值作为角度中的键值对

来自分类Dev

Laravel:如何将键值添加到对象中?

来自分类Dev

如何将键值对添加到数组中的对象?

来自分类Dev

如何将List <Object>保存到SharedPreferences flutter中?

来自分类Dev

键值对如何存储在Redis中?

来自分类Dev

如何将字典中的键与列表中的元素进行匹配,并将这些键值存储到python中的另一个字典中?

来自分类Dev

如何将客户存储在列表中

来自分类Dev

如何将ERRORLEVEL存储在变量中?

来自分类Dev

如何将JSON存储在变量中

来自分类Dev

如何将图像存储在矢量中?

来自分类Dev

如何将变量存储在文件中?

来自分类Dev

如何将输出存储在向量中?

来自分类Dev

如何将 int 存储在 String 中?

来自分类Dev

如何将编辑后的数据存储在本地存储中?

来自分类Dev

如何将pdf文件存储在Google云存储中?

来自分类Dev

如何将输入多次存储到本地存储中

来自分类Dev

如何将聊天消息存储到离子存储中?

来自分类Dev

如何将存储过程的输出存储在表中

来自分类Dev

将ArrayList <CustomClass>存储到SharedPreferences中

来自分类Dev

Android:将ArrayList <T>存储在SharedPreferences中?

来自分类Dev

如何将键值转换为int?

来自分类Dev

如何在SharedPreferences中存储堆栈

Related 相关文章

  1. 1

    如何将ArrayList或HashMap存储到文件或SharedPreferences中?

  2. 2

    如何将ArrayList <HashMap <String,String >>数据存储到sharedpreferences中?

  3. 3

    如何使用python将键值对存储在Elasticsearch索引中

  4. 4

    如何使用python将键值对存储在Elasticsearch索引中

  5. 5

    如何将sharedpreferences文件从内部存储传输到外部存储?

  6. 6

    如何将地图键值收集到列表中

  7. 7

    如何将键值对添加到deedle系列中?

  8. 8

    如何将数组值作为角度中的键值对

  9. 9

    Laravel:如何将键值添加到对象中?

  10. 10

    如何将键值对添加到数组中的对象?

  11. 11

    如何将List <Object>保存到SharedPreferences flutter中?

  12. 12

    键值对如何存储在Redis中?

  13. 13

    如何将字典中的键与列表中的元素进行匹配,并将这些键值存储到python中的另一个字典中?

  14. 14

    如何将客户存储在列表中

  15. 15

    如何将ERRORLEVEL存储在变量中?

  16. 16

    如何将JSON存储在变量中

  17. 17

    如何将图像存储在矢量中?

  18. 18

    如何将变量存储在文件中?

  19. 19

    如何将输出存储在向量中?

  20. 20

    如何将 int 存储在 String 中?

  21. 21

    如何将编辑后的数据存储在本地存储中?

  22. 22

    如何将pdf文件存储在Google云存储中?

  23. 23

    如何将输入多次存储到本地存储中

  24. 24

    如何将聊天消息存储到离子存储中?

  25. 25

    如何将存储过程的输出存储在表中

  26. 26

    将ArrayList <CustomClass>存储到SharedPreferences中

  27. 27

    Android:将ArrayList <T>存储在SharedPreferences中?

  28. 28

    如何将键值转换为int?

  29. 29

    如何在SharedPreferences中存储堆栈

热门标签

归档