我想将hashmap对象存储在全局类中,以便即使在移动设备重启后它也会存储值。知道怎么做这个概念。
答案 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)
将其序列化并将其保存在共享首选项或文件中。当然,您是否可以这样做取决于从哪里映射的数据类型。 (例如,如果您尝试序列化视图,则无法使用。)