如何存储hashmap以便在设备重启后可以保留它的值?

时间:2011-02-10 04:43:59

标签: android

我想将hashmap对象存储在全局类中,以便即使在移动设备重启后它也会存储值。知道怎么做这个概念。

3 个答案:

答案 0 :(得分:7)

在重新启动之前序列化您的hashmap对象,并在重新启动后反序列化它...

这是序列化的示例代码..

public void serializeMap(HashMap<String,String> hm) {
    try {
        FileOutputStream fStream = openFileOutput(namefile.bin, Context.MODE_PRIVATE) ;
        ObjectOutputStream oStream = new ObjectOutputStream(fStream);

        oStream.writeObject(hm);        
        oStream.flush();
        oStream.close();

        Log.v("Serialization success", "Success");
    } catch (Exception e) {
        Log.v("IO Exception", e.getMessage());
    }
}   

你也可以通过反序列化来阅读它....
感谢....

答案 1 :(得分:5)

非常感谢,但使用共享首选项技术可以完成同样的事情。 下面是将数据添加到共享首选项并检查是否已存在的代码。

  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
            }
        }

答案 2 :(得分:1)

将其序列化并将其保存在共享首选项或文件中。当然,您是否可以这样做取决于从哪里映射的数据类型。 (例如,如果您尝试序列化视图,则无法使用。)