我有一个名为 Shop 的课程,其中包含 2个字段和1个静态字段。该类实现了 Parcelable 接口:
public class Shop implements Parcelable{
private static int SHOP_ID = 12;
private String name;
private long fund;
//constructor with parcel
public Shop(Parcel parcel){
name = parcel.readString();
fund = parcel.readLong();
}
//normal constructor
public Shop(Owner owner){
name = owner.getShopName();
fund = owner.getFund();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeLong(fund);
}
public static final Creator<Shop> CREATOR = new Creator<Shop>(){
@Override
public Shop createFromParcel(Parcel parcel) {
//use the constructor which accept parcel
return new Shop(parcel);
}
@Override
public Shop[] newArray(int size) {
return new Shop[size];
}
};
}
现在,我的代码使用普通构造函数启动 Shop 实例:
Owner owner = getOwnerInfo();
Shop myShop = new Shop(owner); //initiate a Shop with owner
然后,我的代码将shop
实例存储到Android的内部存储:
String fileName = "shop_file";
try{
FileOutputStream fos = activity.openFileOutput(fileName,Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(myShop);
oos.flush();
oos.close();
}catch(Exception ex){
...
}
但是当我运行我的应用程序时,我得到了 java.io.NotSerializableException :
06-12 13:04:29.258: W/System.err(2632): java.io.NotSerializableException: com.my.app.model.Shop
06-12 13:04:29.258: W/System.err(2632): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
06-12 13:04:29.266: W/System.err(2632): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
06-12 13:04:29.266: W/System.err(2632): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
为什么呢?我哪里错了?
答案 0 :(得分:3)
从execption看来,你试图序列化一个没有实现Serializable
的CartData实例:
java.io.NotSerializableException: com.my.app.model.Shop
如果要序列化,请设Shop implemensts Serializable
来自doc
Parcel不是通用序列化机制。这个班 (以及用于放置任意对象的相应Parcelable API 成为一个包裹)被设计为高性能的IPC运输。如 因此,将任何Parcel数据放入持久性数据库是不合适的 存储:任何数据的底层实现的更改 在包中可以使旧数据无法读取。
答案 1 :(得分:0)
我认为问题来自你的“所有者”对象,它也没有被序列化。尝试使用Parcelable
序列化此对象