我正在开发一个随机生成密码的应用程序。我正在添加“保存”功能,以便用户可以在中保存密码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] 删除。
我来说两句