Aller au contenu

8 octobre 2011

Passer un objet d’une Activity à une autre

Cette astuce peut s’avérer relativement utile lorsque l’objet en question est peuplé depuis une source externe comme un flux RSS, ce qui peut parfois demander un temps d’attente assez long. La méthode utilise le principe de serialization qui va tout simplement transformer nos objets ‘Serializable’ en byte[].

Pour cela, nous disposons d’une classe, à partir de laquelle, les objets que nous souhaitons sérialiser devront hériter. De la sorte, vos objets pourront être passés très simplement d’une Activity à une autre.

public class CSerializable implements Serializable {

    public byte[] serialize () throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream ();
        ObjectOutput out = new ObjectOutputStream (bos);
        out.writeObject (this);
        out.close ();
        return bos.toByteArray ();
    } // serialize ();

    public Object unserialize (byte[] b) throws IOException,
            ClassNotFoundException {
        ByteArrayInputStream bis = new ByteArrayInputStream (b);
        ObjectInputStream in = new ObjectInputStream (bis);
        Object object = in.readObject ();
        bis.close ();
        in.close ();
        return object;
    } // unserialize ();

}; // CSerializable;

Pour continuer, voici un exemple vraiment très simple d’objet devant hériter de la classe CSerializable.

public class CTest extends CSerializable {
    protected String title, content;
    protected Date date;

    public void populate (byte[] serialize)
            throws IOException, ClassNotFoundException {
        CTest object = (CTest)unserialize (serialize);
        setTitle (object.getTitle ());
        setContent (object.getContent ());
        setDate (object.getDate ());
    } // populate ();

    public String getTitle () {return title;}
    public void setTitle (String title) {this.title = title;}

    public String getContent () {return content;}
    public void setContent (String content) {this.content = content;}

    public Date getDate () {return date;}
    public void setDate (Date date) {this.date = date;}
}; // CTest;

Le passage de l’objet de l’Activity 1 vers la 2 se résumer alors à ce qui va suivre:

// CActivity1
CTest test = new CTest ();
test.setTitle ("Mon titre");
test.setContent ("Mon contenu");
test.setDate (new Date ());
Intent intent = new Intent (getApplicationContext (), CActivity2.class);
intent.putExtra ("test", test.serialize ());
startActivity (intent);
// CActivity2
byte[] testArray = getIntent ().getExtras ().getByteArray ("test");
CTest test = new CTest ();
test.populate (testArray);
En savoir plus de Android, Java

Donnez votre avis, envoyez un commentaire

(required)
(required)

Note: le code HTML est autorisé. Votre adresse mel ne sera jamais publiée.

S'abonner aux commentaires