2011-05-24 70 views
6

我想让我的数据类实现Parcelable,以便它可以在活动之间共享,但是它也需要对上下文的引用,以便字段可以保存到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的类还引用上下文,以便将其保存到SQLiteDatabase?

+0

也许你可以使用(MyApp)getApplicationContext()来保存/读取MyApp extends Application中的动态数据。 – JAL 2011-05-24 19:11:06

回答

5

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

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

如果您想要将活动的状态保存到数据库中,则应该找到另一种方法来执行此操作。

0

您的Record类可能并不需要访问SQL数据库。其原因正是现在的问题:将上下文注入每条记录非常困难。

也许更好的解决方案是实现一个静态RecordSQLService,它有方法save(Record r)。应用程序启动时,您的应用程序可能会启动RecordSQLService,所以只要您的应用程序保持运行状态,它就会保持活动状态,并且需要保存远离Record类的责任,这使得您不需要上下文,并且可以将其包裹。

相关问题