所以,我正试图在Android上存储HashMap
。我认为最好使用internal storage,但我不明白如何在中保存 HashMap
,然后再阅读。有人可以解释一下如何正确地做到这一点吗?
有些计数器有自己的名称和值。我想在启动一些活动时加载它们,使用它们(更改,删除,添加新的),然后保存这些数据以供下次使用。现在我使用HashMap,因为它很容易删除/添加值。
HashMap<String, Integer> counters;
答案 0 :(得分:12)
SharedPreferences还将键值对中的数据存储为hashmap,因此为什么不从hashmap获取所有键值并将其存储到map中,如下所示:
SharedPreferences pref= getContext().getSharedPreferences("Your_Shared_Prefs"),
Context.MODE_PRIVATE);
SharedPreferences.Editor editor= pref.edit();
for (String s : map.keySet()) {
editor.putString(s, map.get(s));
}
要获取可以使用的值:
public abstract Map<String, ?> getAll ()
http://developer.android.com/reference/android/content/SharedPreferences.html#getAll%28%29
使用:
SharedPreferences pref= getContext().getSharedPreferences("Your_Shared_Prefs"),
Context.MODE_PRIVATE);
HashMap<String, String> map= HashMap<String, String> pref.getAll();
for (String s : map.keySet()) {
String value=map.get(s);
//Use Value
}
代码未编译,因此可能会有一些小错误,但应该有效。
答案 1 :(得分:4)
试试这个
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("key", "value");
Intent intent = new Intent(this, MyOtherActivity.class);
intent.putExtra("map", hashMap);
startActivity(intent);
另一种方式是HERE
答案 2 :(得分:0)
有一个很好的例子here。
因此,如果您的地图是这样的:
HashMap<String, byte[]> = new HashMap<>();
函数如下所示:
public void saveHashMap(String key , Object obj) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(obj);
editor.putString(key,json);
editor.apply(); // This line is IMPORTANT !!!
}
public HashMap<String,byte[]> getHashMap(String key) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
String json = prefs.getString(key,"");
java.lang.reflect.Type type = new TypeToken<HashMap<String,byte[]>>(){}.getType();
HashMap<String,byte[]> obj = gson.fromJson(json, type);
return obj;
}
通用代码如下:
public void saveHashMap(String key , Object obj) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(obj);
editor.putString(key,json);
editor.apply(); // This line is IMPORTANT !!!
}
public HashMap<Integer,YourObject> getHashMap(String key) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
Gson gson = new Gson();
String json = prefs.getString(key,"");
java.lang.reflect.Type type = new TypeToken<HashMap<Integer,YourObject>>(){}.getType();
HashMap<Integer,YourObject> obj = gson.fromJson(json, type);
return obj;
}
用您的Java对象替换YourObject
。