Passer la sérialisation de l'objet à travers l'intention
Ceci est ma première tentative pour demander une solution à un problème de mine donc, essayez d'être le genre de gars! J'ai trouvé de nombreuses solutions à des problèmes que je traite dans ce site en faisant une recherche simple, mais cette fois, j'ai pas eu de chance je pense. Je n'ai rien trouvé pour l'adapter à mon problème donc j'ai fini de poser une nouvelle question.
Je m 'en essayant de passer d'un objet à travers une intention d'une activité à une autre. J'ai une classe abstraite et deux sous-classes (l'une d'entre eux aussi abstrait) comme suit. J'ai besoin d'eux pour être abstrait. J'ai enlevé beaucoup de code (résumé des méthodes, etc.) juste pour savoir quel est le problème et j'ai fini avec ces vraiment des classes simples et j'ai toujours le même problème.
public abstract class MyObject {
private boolean New;
private boolean Modified;
public MyObject() {
New = true;
}
public boolean isNew() {
return New;
}
protected void setNew(boolean value) {
New = value;
}
protected boolean isModified() {
return Modified;
}
protected void setModified(boolean value) {
Modified = value;
}
}
public abstract class MyItemBase extends MyObject {
private Long Id;
private String Description;
public MyItemBase() {
super();
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
}
public class MyItem extends MyItemBase implements Serializable {
private static final long serialVersionUID = -2875901021692711701L;
public MyItem() {
super();
}
}
J'ai deux Activités, ActivityA avec un bouton pour appeler ActivityB comme suit.
public class ActivityA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),
ActivityB.class);
MyItem item = new MyItem();
item.setId((long) 1);
item.setDescription("test");
intent.putExtra("MyItem", (Serializable) item);
startActivityForResult(intent, 1);
}
});
}
}
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
MyItem item = (MyItem) getIntent().getSerializableExtra("MyItem");
((TextView) findViewById(R.id.text)).setText(item.getDescription());
}
}
Alors, quand je reçois MyItem à partir de la deuxième activité, sans erreurs à tous, à la fois les propriétés de l'Id et la Description sont nulles. En fait, c'est un nouvel objet, parce que la Nouvelle propriété est vraie. Maintenant, si j'essaie d'obtenir l'objet exactement après que je l'ai mis dans l'intention dans la première Activité, comme ça
intent.putExtra("MyItem", (Serializable) item);
MyItem newItem = (MyItem) intent.getSerializableExtra("MyItem");
startActivityForResult(intent, 1);
il fonctionne très bien. newItem a toutes les propriétés avec les valeurs correctes.
Des idées?
Merci à l'avance tout le monde!
Object
vous souhaitez passer commeSerializable
ont à mettre en œuvreSerializable
interface.
Vous devez vous connecter pour publier un commentaire.
De l'officiel Serializable doc:
Votre classe de base n'est pas mise en œuvre
Serializable
, afin que ses champs ne sont pas d'être sérialisé.Faire
MyItemBase
(ou mêmeMyObject
)Serializable
et tous ses descendants deviendront égalementSerializable
(sans explicitement la mise en œuvre de l'interface).