2011-05-24 14 views
6

Me gustaría que mi clase de datos implemente Parcelable para que pueda compartirse entre Actividades, sin embargo, también necesita referencia a Contexto para que los campos puedan guardarse en SQLiteDatabase.Implementando Clase Parcelable que Requiere Contexto

Sin embargo, esto es un problema ya que el método Parcelable.Creator createFromParcel solo tiene un parámetro 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]; 
    } 
}; 
} 

¿Cómo puede una clase que implemente Parcelable también hacer referencia al contexto para que se guarde en SQLiteDatabase?

+0

Quizás pueda guardar/leer los datos dinámicos en la aplicación MyApp extends using (MyApp) getApplicationContext(). – JAL

Respuesta

5

La interfaz parcelable es como la interfaz Java Serializable. Los objetos que implementan esta interfaz deben ser serializables. Esto significa que debería ser posible transformar el objeto en una representación que podría guardarse en un archivo, p.

Es fácilmente posible para una cadena, int, flotante o doble, etc., porque todas tienen una representación de cadena. La clase de contexto claramente no es serializable y no se puede dividir en parcelas, porque puede ser una actividad, por ejemplo.

Si desea guardar el estado de su actividad en una base de datos, debe encontrar otra manera de hacerlo.

0

Su clase de registro probablemente no necesite acceso a la base de datos SQL. El motivo es exactamente el problema que tiene ahora: es muy difícil volver a insertar el Contexto en cada registro.

Quizás una solución mejor sería implementar un RecordSQLService estático, que tenga el método save(Record r). Su aplicación podría iniciarse al RecordSQLService cuando se inicie la aplicación, por lo que permanecerá activa mientras que su aplicación lo haga, y asume la responsabilidad de guardarla fuera de la clase Record, lo que hace que ya no necesite Contexto y puede Parcel it .

Cuestiones relacionadas