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 comme Serializable ont à mettre en œuvre Serializable interface.
InformationsquelleAutor pavlospap | 2013-10-06