Aller au contenu


Photo

Passer un objet en paramètre d'intent


  • Veuillez vous connecter pour répondre
18 réponses à ce sujet

#1 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 09 janvier 2010 - 05:29

Bonjour,
je suis débutant sous android et ça fait pas mal de temps que je n'ai pas fait d'objet du coup possible que je dise de grosses conneries :)

Alors voila j'ai un problème pour passer l'instance d'une classe générée dans une activity à une autre activity. Est ce qu'il faut utiliser putExtra() ? J'ai l'impression que l'on ne peut que transférer des types Int, string etc ..

Pour être plus clair, je génère une instance d'une classe "meuble" sur un écran, avec ses paramètres genre le nom, le type etc et en passant sur un autre écran via un intent je voudrai pouvoir accéder à cette instance de meuble. Je sais pas si c'est très clair :)

Merci d'avance,
bab

Modifié par bablight, 09 janvier 2010 - 05:51 .


#2 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 09 janvier 2010 - 06:22

Tu peux passer sans soucis un object chaine (String), heureusement même :D

Montre nous ton code il doit y avoir un truc qui cloche :)
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#3 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 09 janvier 2010 - 06:54

Slt, et merci de ta réponse rapide,
par contre je n'ai pas du être clair ce n'est pas un objet chaine que je veux passer mais un truc du genre :

// instance de Perso
Perso Per1 = new Perso( NomPers, PrenomPers, ClassPers);
//appel de l'activity :
Intent explicit = new Intent();
explicit.setClassName("org.bab.android.demo", "org.bab.android.demo.PersoCreaActivity");
startActivityForResult(explicit, Affiche_Request);

Je veux passer Per1 en paramètre pour y avoir accès dans ma nouvelle Activity. Après je pense que je dois pas comprendre un truc essentiel :P

bab

#4 Viish

Viish

    Grand gourou

  • Members
  • 130 messages
  • LocationGrenoble

Posté 09 janvier 2010 - 09:51

Fais en sorte que ta classe implémente Serializable et ça devrait marcher (si je dis pas de bétises).
Tutos en Français sur Android : http://www.thinkdroid.eu/

#5 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 09 janvier 2010 - 10:48

Ha ok je vois, je n'ai jamais testé un objet perso mais je ne pense pas que ça soit un problème, de mémoire je crois qu'on peut passer un extra de type Object (donc tout type d'objet en gros).

Essaye la technique de Viish ça me parait pas mal (car je pense qu'Android doit sérialiser un objet pour le passer via un intent), si ça ne fonctionne pas faudra regarder un peu plus la doc de ce côté.
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#6 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 11 janvier 2010 - 11:38

Slt,
alors pour vous tenir au courant, j'ai pour l'instant plus ou moins réussit ce que je voulais faire. J'ai rendu ma classe d'objet que je veux passer en paramètre "Parcelable" et ainsi j'ai pu faire un intent.PutExtra("Nom objet",Objet Parcelable). Ca semble fonctionner mais par contre je n'ai pas encore vu comment récupérer l'objet dans la nouvelle activité. Il faut faire un intent.getData() ?

bab

#7 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 11 janvier 2010 - 01:36

Re slt ;)
bon j'ai cherché sur la doc officielle d'android et je pense (pas encore testé) que je vais devoir utiliser la méthode :
getParcelableExtra(String name)
de l'intent.

merci de votre aide :)

bab

#8 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 11 janvier 2010 - 06:59

Si tu l'as passé en extra normalement tu peux le récupérer avec aussi en extra via le bundle :)
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#9 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 11 janvier 2010 - 09:14

Arf j'arrive pas a récupérer ce que j'envoie avec putExtra().
J'ai essayé avec bundle.getParcelable(); mais je ne sais pas quoi mettre en "key" et pour l'instant ça me fait planter l'appli. Au début je pensais qu'avec intent.getParcelableExtra(); ca fonctionnerai mais je ne récupère rien du tout .... franchement je sèche un peu là :(

bab

#10 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 11 janvier 2010 - 10:00

C'est la clé que tu as mis dans le put "Nom objet"
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#11 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 11 janvier 2010 - 10:37

grr je suis persuadé d'avoir tester ça. Bon je recommence ptetre que j'ai oublié un truc. En tout cas merci :P

bab

#12 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 12 janvier 2010 - 08:34

bon j'ai trouvé le problème. Ma classe parcelable était mal foutu. Merci beaucoup pour votre aide.

bab

#13 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 12 janvier 2010 - 02:32

C'était quoi qui bloquait dans ta classe ? (ça pourra surement me servir un jour ^^)
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#14 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 12 janvier 2010 - 04:01

je n'ai pas le code devant moi, je te copie / colle ca ce soir :)

#15 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 12 janvier 2010 - 08:45

Alors voici ma classe Parcelable :
package org.bab.android.demo;
import android.os.Parcel;
import android.os.Parcelable;

public final class Perso implements Parcelable  {
public String NomPerso;
public String PrenomPerso;
public String ClassePerso;




public Perso() {
    // TODO Auto-generated constructor stub
    this.NomPerso = "Nom";
    this.PrenomPerso = "Prenom";
    this.ClassePerso = "Classe";
}
public Perso (Parcel in) {
    
    this.NomPerso    = in.readString();
    this.PrenomPerso = in.readString();
    this.ClassePerso = in.readString();
    
}    


    public static final Parcelable.Creator<Perso> CREATOR = new Parcelable.Creator<Perso>() 
        {
        
        public Perso createFromParcel(Parcel in)
        {
            //Perso perso = new Perso();
            //perso.NomPerso = in.readString();
            //perso.PrenomPerso = in.readString();
            //perso.ClassePerso = in.readString();
            return new Perso(in);
        }    
                        
        
        public Perso[] newArray(int size) {
            return new Perso[size];
        }
        
    };

    
    public Perso(String Nom, String Prenom, String Classe) {
        // TODO Auto-generated constructor stub
        this.NomPerso = Nom;
        this.PrenomPerso = Prenom;
        this.ClassePerso = Classe;    
                
    }

    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    public void writeToParcel(Parcel arg0, int arg1) {
        // TODO Auto-generated method stub
        arg0.writeString(NomPerso);
        arg0.writeString(PrenomPerso);
        arg0.writeString(ClassePerso);
        
    }
    

}


En fait ce qui n'allait pas c'est que le constructeur
public Perso (Parcel in) {
    
    this.NomPerso    = in.readString();
    this.PrenomPerso = in.readString();
    this.ClassePerso = in.readString();
}

n'était pas au bon endroit, je l'avais mis à la place de :

public Perso createFromParcel(Parcel in)
        {
    return new Perso(in);
        }

Et mainteannt ca fonctionne, en espérant que aide des gens :)

bab

#16

  • Guests

Posté 12 janvier 2010 - 08:48

Pourrais mettre ton code entre les balises pour ce soit plus claire ? (il t'es possible de modifier ton propre message)

Pour info, j'ai suivi de près ton post qui pourrai en effet me servire par la suite :)

#17 K20

K20

    Grand gourou

  • Members
  • 103 messages

Posté 12 janvier 2010 - 09:50

Merci !

Ce topic je le garde dans un coin !
Président de l'association PC-Shows
Nexus One - Orange Origami Style

#18 Le suisse

Le suisse

    VIM (Very Important Membre)

  • Moderators
  • 2475 messages

Posté 12 janvier 2010 - 10:12

J'ai ajouté les balises code afin ca soit plus lisible pour vous. ;)
Doucement le matin et pas trop vite l'après midi
Vous pouvez me (re)trouver sur Twitter ;)

#19 bablight

bablight

    Membre

  • Members
  • 10 messages

Posté 13 janvier 2010 - 07:32

Merci pour les balise et désolé de ne pas y avoir pensé avant :)

bab




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)