想要存储HashMap?

时间:2013-06-20 14:06:36

标签: java android hashmap gson

我有一个在活动中生成的HashMap,我想使用类似于SharedPreferences的东西来存储它。我试图找到信息,并参考了一个名为GSON的东西,但我不确定那是什么。如果我有类似的东西:

HashMap<String, String> hashMap = new HashMap<String, String> ();
hashMap.put("String 1", "Value 1");
hashMap.put("String 2", "Value 2");

如何存储hashMap以便我可以在另一个活动中读取它并使用该信息?如果用户关闭应用程序,也需要存储它。

3 个答案:

答案 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的答案。