实现需要上下文的Parcelable类

时间:2011-05-24 15:18:35

标签: android parcelable

我希望我的数据类能够实现Parcelable,因此它可以在Activities之间共享,但是它还需要引用Context,因此可以将字段保存到SQLiteDatabase。

这是一个问题,因为Parcelable.Creator方法createFromParcel只有一个参数Parcel。

public abstract class Record implements Parcelable {

protected Context context;
protected String value;

public Record(Context context) {
    this.context = context;
}

public Record(Parcel parcel) {
    this.value = parcel.readString();
}

public void save() {
    //save to SQLiteDatabase which requires Context
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int flag) {
    parcel.writeString(value);
}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public Record createFromParcel(Parcel parcel) {
        return new Record(in);
    }

    public Record[] newArray(int size) {
        return new Record[size];
    }
};
}

实现Parcelable的类如何引用Context以便保存到SQLiteDatabase?

2 个答案:

答案 0 :(得分:6)

Parcelable接口类似于Java接口Serializable。实现此接口的对象应该是可序列化的。这意味着应该可以将对象转换为可以保存在文件中的表示,例如

字符串,int,float或double等很容易,因为它们都有字符串表示。 Context类显然不是可序列化的,也不是可分区的,因为它可以是一个Activity。例如。

如果要将活动状态保存到数据库,您应该找到另一种方法。

答案 1 :(得分:0)

您的Record类可能并不真正需要访问SQL数据库。它的原因正是你现在遇到的问题:将Context重新注入每个记录是非常困难的。

也许更好的解决方案是实现具有方法RecordSQLService的静态save(Record r)。您的应用程序可以在应用程序启动时启动RecordSQLService,因此只要您的应用程序启动它就会保持活动状态,并且它负责远离Record类,这使得您不再需要Context并且可以包裹它。