2012-06-11 26 views
6

quiero hacer esto Uso parcelable para pasar un objeto de una actividad a otra androide

class A extends Activity{ 
    private class myClass{ 
    } 
    myClass obj = new myClass(); 

    intent i = new Intent(); 
    Bundle b = new Bundle(); 
    b.putParcelable(Constants.Settings, obj); //I get the error The method putParcelable(String, Parcelable) in the type Bundle is not applicable for the arguments (int, A.myClass) 
    i.setClass(getApplicationContext(),B.class); 
    startActivity(i); 
} 

¿Cómo uso parcelable pasar obj a la actividad B?

Respuesta

5

Como sugiere el error, es necesario haga que su clase (myClass en este caso) implemente Parcelable. Si nos fijamos en el documentation for Bundle, todos los métodos putParcelable toman Parcelable o una colección de ellos de alguna forma. (Esto tiene sentido, dado el nombre.) Así que si desea utilizar este método, es necesario tener una instancia Parcelable para poner en el haz ...

Por supuesto que no lo tienen utilizar putParcelable - podría implementar Serializable y llamar al putSerializable.

+0

La forma en que he entendido la interfaz Serializable es que se usa para admitir serialización y deserialización. ¿Cómo es aplicable aquí? Además, incluso si implemento Parcelable, ¿cómo convierto mi objeto en un paquete? ¿Podría señalarme un ejemplo? – Namratha

+0

@Namratha: Está tratando de pasar información, que es precisamente para lo que está la serialización. Si está trabajando en el mismo proceso, no necesita ningún paquete, por lo que yo sé, pero si necesita pasar información entre procesos, la serialización de una forma u otra es de lo que está hablando. . –

+0

Ya veo. Pero leo aquí http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/ que Serializable está asociado con un rendimiento alcanzado, mientras que Parcelable no lo es. También sigo teniendo problemas para tratar de convertir mi objeto en una instancia Parcelable. – Namratha

7

Cree su clase e implementa Serializable:

private class myClass implements Serializable { 
    } 

Y hacer como:

myClass obj = new myClass(); 
Intent aActivity = (A.this, B.class); 
intent.putExtra("object", obj); 

Por el lado de recepción:

myClass myClassObject = getIntent().getSerializableExtra("object"); 
+0

Creo que te refieres Intención aActivity = new Intent (A.This, B.class); ? ¡Gracias! – Namratha

2

Parcelable es dolor al escribir código pero es más rentable que Serializable. Echar un vistazo a la figura a continuación enlace -

Parcelable Vs Serializable

Cuestiones relacionadas