问题描述
|
我希望数据类实现Parcelable,以便可以在Activity之间共享它,但是它也需要引用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?
解决方法
Parcelable接口类似于Java接口Serializable。实现此接口的对象应可序列化。这意味着应该有可能将对象转换为可以保存在文件中的表示形式,例如
字符串,整型,浮点型或双精度型等很容易实现,因为它们都具有字符串表示形式。 Context类显然不可序列化和不可打包,因为例如它可以是一个Activity。
如果要将活动状态保存到数据库,则应找到另一种方法。
,您的Record类可能实际上并不需要访问SQL数据库。原因恰恰就是您现在遇到的问题:将Context重新注入到每个Record中非常困难。
也许更好的解决方案是实现具有方法“ 2”的静态“ 1”。您的应用在启动时可能会启动
RecordSQLService
,因此只要您运行,它就会一直保持活动状态,而且它有责任保存Record类,这使您不再需要Context并可以打包它。