J'essaie de rendre mes objets parcelables. Cependant, j'ai des objets personnalisés et ces objets ont des propriétés ArrayList
des attributs d'autres objets personnalisés que j'ai fabriqués.
Quelle serait la meilleure façon de procéder ?
J'essaie de rendre mes objets parcelables. Cependant, j'ai des objets personnalisés et ces objets ont des propriétés ArrayList
des attributs d'autres objets personnalisés que j'ai fabriqués.
Quelle serait la meilleure façon de procéder ?
C'est très simple, vous pouvez utiliser un plugin sur Android studio pour rendre les objets Parcelables.
public class Persona implements Parcelable {
String nombre;
int edad;
Date fechaNacimiento;
public Persona(String nombre, int edad, Date fechaNacimiento) {
this.nombre = nombre;
this.edad = edad;
this.fechaNacimiento = fechaNacimiento;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.nombre);
dest.writeInt(this.edad);
dest.writeLong(fechaNacimiento != null ? fechaNacimiento.getTime() : -1);
}
protected Persona(Parcel in) {
this.nombre = in.readString();
this.edad = in.readInt();
long tmpFechaNacimiento = in.readLong();
this.fechaNacimiento = tmpFechaNacimiento == -1 ? null : new Date(tmpFechaNacimiento);
}
public static final Parcelable.Creator<Persona> CREATOR = new Parcelable.Creator<Persona>() {
public Persona createFromParcel(Parcel source) {
return new Persona(source);
}
public Persona[] newArray(int size) {
return new Persona[size];
}
};}
J'ai essayé d'utiliser Parcellable, mais j'ai manqué de temps, j'ai donc utilisé Gson comme ci-dessous. Peut-être que cela pourrait aider d'autres personnes...
PersonData personData;
BusinessData businessData;
Les deux objets ci-dessus sont des objets modèles. Je voulais qu'il soit transmis à MainActivity.class à partir de LoginActivity.class. Parcellable ne fonctionnait pas avec d'énormes modèles et aurait pris du temps pour faire des changements J'ai donc fait ceci,
startActivity(
new Intent(LogInActivity.this, MainActivity.class)
.putExtra("businessData", new Gson().toJson(businessData))
.putExtra("personData", new Gson().toJson(personData))
);
Récupérer ces objets dans MainActivity.class
BusinessData businessData = new Gson().fromJson(getIntent().getStringExtra("businessData"), BusinessData.class);
PresonData personData = new Gson().fromJson(getIntent().getStringExtra("personData"), PersonData.class);
Vous pouvez maintenant utiliser Parceler pour convertir n'importe quelle classe personnalisée en parcelable. Il suffit d'annoter votre classe POJO avec @Parcel . par exemple
@Parcel
public class Example {
String name;
int id;
public Example() {}
public Example(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() { return name; }
public int getId() { return id; }
}
vous pouvez créer un objet de la classe Exemple et l'envelopper dans des colis et l'envoyer en tant que paquet par le biais de l'intention. par exemple
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
Pour obtenir l'objet Custom Class, il suffit d'utiliser
Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.