java.io.notserializableexception android,android-编写Parcelable对象获取java.io.NotSerializableException...

本文探讨了一个在Android应用中尝试将Shop类实例存储为对象文件时遇到的NotSerializableException问题。作者详细展示了Shop类的定义,包括Parcelable实现,并解释了为何常规构造函数创建的Shop实例不能被序列化,以及如何修复此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个名为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 CREATOR = new Creator(){

@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)

为什么?我哪里错了?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值