8

我希望我的数据类实现 Parcelable,以便它可以在活动之间共享,但是它还需要引用 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?

4

2 回答 2

6

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

字符串、int、float 或 double 等很容易实现,因为它们都有字符串表示。Context 类显然是不可序列化且不可打包的,因为它可以是例如 Activity。

如果你想将你的活动状态保存到数据库中,你应该找到另一种方法来做到这一点。

于 2011-05-24T15:30:40.323 回答
0

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

也许更好的解决方案是实现一个静态的RecordSQLService,它有方法save(Record r)。您的应用程序可以RecordSQLService在应用程序启动时启动,因此只要您的应用程序运行,它就会保持活动状态,并且它负责从 Record 类中保存,这使得您不再需要 Context 并且可以对其进行 Parcel。

于 2013-12-17T00:21:47.840 回答