Implementing Parcelable Class That Requires Context
我希望我的数据类实现Parcelable,以便可以在Activity之间共享它,但是它也需要引用Context,以便可以将字段保存到SQLiteDatabase。
但是,这是一个问题,因为Parcelable.Creator方法createFromParcel仅具有一个参数Parcel。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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。实现此接口的对象应可序列化。这意味着应该可以将对象转换为可以保存在文件中的表示形式,例如
很容易使用字符串,int,float或double等,因为它们都具有字符串表示形式。 Context类显然不可序列化和不可打包,因为例如它可以是一个Activity。
如果要将活动状态保存到数据库中,则应该找到另一种方法。
您的Record类可能实际上不需要访问SQL数据库。原因恰恰就是您现在遇到的问题:将上下文重新注入到每个Record中非常困难。
也许更好的解决方案是实现具有方法