【发布时间】:2011-02-10 04:43:59
【问题描述】:
我想将 hashmap 对象存储在全局类中,这样即使在移动设备重启后它也能存储值。知道如何实现这个概念。
【问题讨论】:
标签: android
我想将 hashmap 对象存储在全局类中,这样即使在移动设备重启后它也能存储值。知道如何实现这个概念。
【问题讨论】:
标签: android
重启前序列化你的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());
}
}
您可以通过反序列化类似地读取它....
谢谢....
【讨论】:
非常感谢,但同样的事情可以使用共享首选项技术来完成。 下面是将数据添加到共享首选项并检查是否已存在的代码。
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
}
}
【讨论】:
对其进行序列化并将其保存在共享首选项或文件中。当然,您能否做到这一点取决于映射自和映射到的数据类型。 (例如,如果您尝试序列化视图,这将不起作用。)
【讨论】: