我有如下的哈希映射表类型的数据,如何存储和检索(键,值)使用保存的首选项的Android
HashMap<String, String> backUpCurency_values = new HashMap<String, String>();
,我想储存以备将来使用这些值..怎么能我那样做?
编辑:
我将存储国名和currencyvalue作为键值对...
我有如下的哈希映射表类型的数据,如何存储和检索(键,值)使用保存的首选项的Android
HashMap<String, String> backUpCurency_values = new HashMap<String, String>();
,我想储存以备将来使用这些值..怎么能我那样做?
编辑:
我将存储国名和currencyvalue作为键值对...
你应该只使用一个for-each循环,并通过地图像迭代此:
SharedPreferences.Editor editor = getSharedPreferences(PREFS_NAME, 0).edit();
for(Entry<String, String> entry : backUpCurency_values.entrySet())
editor.putString(entry.getKey(), entry.getValue());
editor.commit();
然后,当你需要让你的价值观回来以后使用你做下面的(只要该SharedPreference对象是保留给货币):
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
for(Entry<String, ?> entry : prefs.getAll().entrySet())
backUpCurency_values.put(entry.getKey(), entry.getValue().toString());
它看起来很方便..但我得到了“只能遍历数组或java.lang.Iterable的一个实例”synax error – vnshetty
就是这样。并且,如果您只将货币保存到此SharedPreferences对象中(或专门用于此目的),则可以使用'SharedPreferences'的'getAll()'方法将它们全部取回,该方法将为您提供一个'Map
我的不好 - 你需要在你的'HashMap'上调用'entrySet()'方法。我编辑上面显示正确的语法。 – kaspermoerch
您可以使用SharedPreferences。
settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
//The below step you can repeat to put all the key value pair from the hashmap to the shared preference
editor.putString("Key", Value);
// Commit the edits!
editor.commit();
,并检索以后使用
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getString(<Key>, <defaultvalue>);
您可以使用SharedPreference这样的:
SharedPreferences s_pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Editor edit=s_pref.edit();
edit.putString("key","value");
edit.commit();
后,你可以用它喜欢:
String s=s_pref.getString("key","default value");
但是,你必须有你已经保存的值wi的密钥列表然后放入SharedPreferences中,以便在检索时可以轻松获取值。
有几种不同的方法可以解决这个问题。除了您想要将HashMap存储到SharedPreferences的信息之外,我只能做出假设。
我要问的第一件事是你是否会在SharedPreferences中存储其他东西 - 我会假设你会的。
这里是我会怎么处理它:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("backUpCurency", stringify(backUpCurency_values));
editor.commit();
您可能想看看字符串化的功能:
// turns a HashMap<String, String> into "key=value|key=value|key=value"
private String stringify(HashMap<String, String> map) {
StringBuilder sb = new StringBuilder();
for (String key : map.keySet()) {
sb.append(key).append("=").append(map.get(key)).append("|");
}
return sb.substring(0, sb.length() - 1); // this may be -2, but write a unit test
}
然后,你可以解析与已知结构的字符串在读取共享偏好后来。
private HashMap<String, String> restoreIt() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String backup = settings.getString("backUpCurency", "");
HashMap<String, String> map = new HashMap<String, String>();
for (String pairs : backup.split("|")) {
String[] indiv = pairs.split("=");
map.put(indiv[0], indiv[1]);
}
return map;
}
要存储的值,用这个代码
SharedPreferences preferences = getSharedPreferences(
PREF_FILE_NAME, MODE_PRIVATE);
if (value.equals("")) {
boolean storedPreference = preferences.contains(key);
if (storedPreference) {
SharedPreferences.Editor editor = preferences.edit();
editor.remove(key); // value to store
Log.d("KEY",key);
editor.commit();
}
}else{
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, value); // value to store
Log.d("KEY",key);
editor.commit();
}
要检索的值,用这个代码
SharedPreferences preferences = getSharedPreferences(
PREF_FILE_NAME, MODE_PRIVATE);
Map<String, String> map = (Map<String, String>) preferences.getAll();
if(!map.isEmpty()){
Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry pairs = (Map.Entry)iterator.next();
pairs.getKey()+pairs.getValue();
//write code here
}
}
我已经尝试从这里的代码.. http:// stackoverflow。com/questions/4953466/how-to-store-hashmap-so-it-it-can-be-retain-it-value-after-a-device-reboot但是没有人真的为我着迷...... – vnshetty
它正在为我会粘贴你的代码,以便我们纠正错误。 –
使用迭代器,并把钥匙逐个 –
其他没有别的办法比迭代? – vnshetty
不幸的是!尽管有一种方法可以一次将它们全部加入到HashMap中,但您必须逐一完成。 ): –