我有一个在活动中生成的HashMap,我想使用类似于SharedPreferences的东西来存储它。我试图找到信息,并参考了一个名为GSON的东西,但我不确定那是什么。如果我有类似的东西:
HashMap<String, String> hashMap = new HashMap<String, String> ();
hashMap.put("String 1", "Value 1");
hashMap.put("String 2", "Value 2");
如何存储hashMap
以便我可以在另一个活动中读取它并使用该信息?如果用户关闭应用程序,也需要存储它。
答案 0 :(得分:2)
Json与HasMap非常相似。要保存Json,您必须使用一个键和值,如HasMap:
JSONObject userDetail = new JSONObject();
userDetail.put("email", email);
userDetail.put("token", token);
之后,您可以使用FileWriter或FileInputStream将其保存在.json文件中,您可以使用JSONParser从其他活动中获取它。
有关json look this
的更多信息答案 1 :(得分:2)
跟Victor一起回答。
但是如果你的hashMap很复杂,就像(散列哈希哈希) 您可以将其直接存储在文件中并稍后阅读:
写入文件:
public void saveHashToFile(HashMap<String, Object> hash) throws IOException{
String filePath = getApplicationContext().getFilesDir().getPath().toString() + "/your.properties";
File file = new File(filePath);
FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(getProperty_Global());
s.close();
}
从文件中读回:
public HashMap<String, Object> getLocalHashFromFile() throws OptionalDataException, ClassNotFoundException, IOException{
String filePath = getApplicationContext().getFilesDir().getPath().toString() + "/your.properties";
File file = new File(filePath);
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
HashMap<String, Object> hashFromFile=(HashMap<String, Object>) s.readObject();
s.close();
Log.e("hashfromfileLOCAL", ""+hashFromFile);
return hashFromFile;
}
答案 2 :(得分:1)
Gson是一个用于将Java对象转换为JSON字符串的Java库,反之亦然。 我在我的项目中遇到了同样的问题,并使用Gson将HashMap转换为String,将其保存到SharedPreferences中,并将其恢复到另一个活动中。
存储地图:
SharedPreferences preferences = getSharedPreferences("com.your.package", MODE_PRIVATE);
Type genericType = new TypeToken<HashMap<String, String>>() {}.getType();
String serializedHashMap = Helpers.serializeWithJSON(your_hashmap, genericType);
preferences.edit().putString("Somename", serializedHashMap).commit();
serializeWithJSON():
public static String serializeWithJSON(Object o, Type genericType) {
Gson gson = new Gson();
return gson.toJson(o, genericType);
}
要反序列化:
Gson gson = new Gson();
Type genericType = new TypeToken<HashMap<String, String>>() {}.getType();
HashMap<String, String> hashMap = gson.fromJson(preferences.getString("Somename", "Errormessage"), genericType);
要将其持久存储在文件中,请使用amalBit的答案。