无法序列化对象并在Android中获取它
我正在尝试serlize一个Enum类,这样我可以在onCreate方法中恢复,这样每次运行我都有一个更新的类 下面是用于序列化和反序列化类的代码:无法序列化对象并在Android中获取它,android,fileoutputstream,Android,Fileoutputstream,我正在尝试serlize一个Enum类,这样我可以在onCreate方法中恢复,这样每次运行我都有一个更新的类 下面是用于序列化和反序列化类的代码: private void serializeModulesManager() { try { FileOutputStream fos = openFileOutput("modules.ser", Context.MODE_PRIVATE); ObjectOutputStre
private void serializeModulesManager() {
try {
FileOutputStream fos = openFileOutput("modules.ser",
Context.MODE_PRIVATE);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(Module.values());
out.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void restoreModulesManager() {
FileInputStream fileIn;
Module[] arr = null;
try {
fileIn = openFileInput("modules.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
arr = (Module[]) in.readObject();
for (Module c : arr) {
Module.valueOf(c.name()).serilize(c);
}
in.close();
fileIn.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (StreamCorruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我在onDestroy中调用SerializedModulesManager,在onCreate中调用restoreModulesManager
问题是,当我从任务管理器强制关闭时,ObjectInputStream无法读取对象,我得到一个EOFEException
我如何解决这个问题?以下是我将如何处理这个问题。这是一个只有标题字段的简单对象,但对于更复杂的对象,可以使用相同的方法
public class MyObject implements Parcelable{
public String title;
public MyObject(){}
public MyObject(Parcel source){
title = source.readString();
}
public void setTitle(String title){
this.title = title;
}
public String getTitle(){
return this.title;
}
// Parcel Overrides
@Override
public int describeContents(){return 0;}
@Override
public void writeToParcel(Parcel dest, int flags){
dest.writeString(title);
}
// Parcelable Creator
public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>(){
@Override
public MyObject createFromParcel(Parcel source){
return new MyObject(source);
}
@Override
public MyObject [] newArray(int size){
return new MyObject[size];
}
}
}
然后使用OnCreate或您用来恢复UI的任何方法
// Add this
myObjects = (MyObject [])savedInstanceState.getParcelableArray("MyObjectArray");
你需要用一个文件吗?我知道,如果进入模块对象类并添加implements Parcelable,则可以使用Parcelable对象保存数据,并使用Parcelable CREATOR恢复数据。只需使用savedState捆绑包将模块[]存储为Parcelablar。按照这种方式,您应该使用while循环而不是for循环,并说whilein.isAvailable>0{arr=Module[]in.readObject;}
// Add this
myObjects = (MyObject [])savedInstanceState.getParcelableArray("MyObjectArray");