创建共享偏好xml
文件的备份(以编程方式)并保存到外部存储后,我创建了一种恢复方法,方法是从ObjectInputStream
和FileInputStream
读取数据该xml文件,然后将数据放回应用程序的共享首选项。
这就是我恢复数据的方式:
public void restoreFAV(Context context) {
File src = new File(storagePath+PREFS_NAME+".xml");
ObjectInputStream input = null;
try {
input = new ObjectInputStream(new FileInputStream(src));
SharedPreferences.Editor prefEdit =
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
Log.d("Pref Restore prefEdit",prefEdit.toString());
prefEdit.clear();
Log.d("Pref Restore prefEdit",prefEdit.toString());
Map<String, ?> entries = (Map<String, ?>) input.readObject();
Log.d("Pref Restore entries",entries.toString());
for (Map.Entry<String, ?> entry : entries.entrySet()) {
Object v = entry.getValue();
Log.d("Pref Restore Object v",v.toString());
String key = entry.getKey();
Log.d("Pref Restore String key", key);
prefEdit.putString(key, ((String) v));
}
prefEdit.apply();
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
} finally {
try {
if (input != null) {
input.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
但我得到StreamCorruptedException
例外。
08-20 18:42:44.228: W/System.err(28802): java.io.StreamCorruptedException
08-20 18:42:44.238: W/System.err(28802): at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2115)
08-20 18:42:44.238: W/System.err(28802): at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
我做错了什么!?