IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Envoyer objet par Bluetooth


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut Envoyer objet par Bluetooth
    Bonjour,
    Je réalise une application bluetooth. Actuellement, je peux envoyer des chaines de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static void sendToClient(String msg){
        	PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outputStream));
        	pWriter.write(msg);
        	pWriter.flush();
        	//System.out.println(msg);	
    	}
    Mais je souhaite pouvoir envoyer plus largement des objets.
    Pour envoyer un objet il faut qu'il soit serializable, puisque les échanges se font en binaire. Jusqu’à présent ça fonctionne bien puisqu'un String est serializable, mais je souhaite envoyer des objets de type SimpleEntry, et là, ça bloque.

    Y-a-t-il un moyen de sérializer un SimpleEntry, ou existe-t-il un objet similaire serializable ?

    Merci par avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Je viens de trouver quelque chose : http://stackoverflow.com/questions/1...-via-bluetooth

    Un malin s'amuse a serializer ses object en JSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Gson gson = new Gson();
    MyClass object = gson.fromJson(json, MyClass.class);
     
    // Serialize an object:
     
    Gson gson = new Gson();
    String objectString= gson.toJson(myObject);
    J'avoue que c'est pas mal trouvé... est ce une bonne solution ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Ah non en fait, ça ne fonctionne pas, déjà parce que je ne souhaite pas sérializer maclasse.class, et ensuite parce que l'objet GSON est introuvable.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    Utiliser la serialisation Json est en effet une bonne idée.

    Gson est une librairie de serialisation Json développée par Google.
    Il te faudra l'ajouter a ton classpath (manuellement ou via un outil du genre Maven?) car elle n'est pas de base dans le JDK.


    Tu ne serialises pas MyClass, tu serialises une instance de MyClass (tu peux utiliser SimpleEntry.class a la place ou tout autre classe).


    Ce code permet de deserializer l'objet et de transformer l'objet json en objet Java:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyClass object = gson.fromJson(json, MyClass.class);
    Il est nécessaire de préciser MyClass.class car sinon Gson ne sait pas en quel type il doit deserializer le Json. Il faut que tu mettes le type qui est a l'origine de l'objet.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    Accessoirement Gson est une librairie de premier choix pour la serialisation Json.

    Sinon la librairie Jackson est aussi réputée.
    Après il y a plein d'autres possibilités: JAX-B, XStream...


    L'avantage de l'utilisation du Json est que le Json est interroperable dans tous les langages alors que le format de serialization Java est propriétaire.
    Du coup en utilisant du Json tu pourras développer une appli bluetooth et une appli serveur dans 2 langages différents si besoin.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Oui enfin, la sérialisation Java reste plus simple et plus efficace que la sérialisation JSON -_-°. S'il faut parler avec des technos non-Java je veux bien, mais dans les technos non-Java, les classes des objets à faire passer n'existent pas -_-°.

    C'est quoi, ça, SimpleEntry ? Assez souvent il suffit d'ajouter implements Serializable pour que ça devienne sérialisable. Pas besoin de chercher midi à quatorze heure.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Bonjour à vous,
    Alors oui, JSON est standart, mais je n'ai pas réussi a mettre en place l'exemple que j'ai copié dans mon deuxième post.

    D'un autre côté, mon appli est destiné a recevoir la connexion de téléphones android, donc c'est la même techno..

    SimpleEntry est une classe standard de java permettant d'avoir un couple (key, value).

    SimpleEntry n'est pas une classe que j'ai créé, donc je ne peux pas ajouter implements Serializable.

    De plus, pour le cas du JSON, je ne sais pas si ça va marcher de mettre "SimpleEntry.class", puisque ce n'est pas une de mes classes...

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Oui enfin, la sérialisation Java reste plus simple et plus efficace que la sérialisation JSON -_-°. S'il faut parler avec des technos non-Java je veux bien, mais dans les technos non-Java, les classes des objets à faire passer n'existent pas -_-°.

    C'est quoi, ça, SimpleEntry ? Assez souvent il suffit d'ajouter implements Serializable pour que ça devienne sérialisable. Pas besoin de chercher midi à quatorze heure.

    La sérialisation Java n'est pas plus simple et par défaut elle n'est pas spécialement efficace non plus en plus de n'être pas interroperable.
    Elle n'est pas non plus simple a customiser (cf les methodes privées) et demande de connaitre les bonnes pratiques en terme de versionning et autre...)

    Après c'est vrai que pour le besoin actuel ça peut largement suffire.

    Mais je ne trouve pas que rajouter Gson a son classpath et 3 lignes de code hyper simple soit vraiment compliqué à gérer


    poussinvert quand tu fais transiter des objets sur le réseau c'est tout de même mieux si tu as le contrôle de ces objets.
    A noter que Gson et tous les frameworks Json serialisent très bien les objets de type Map directement mais il y a certaines précautions a prendre avec les generics.

    Voir ce lien:
    http://stackoverflow.com/a/12117517/82609
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Le dernier lien que tu me donnes est intéressant

    Mais je ne comprends pas trop une partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ype typeOfHashMap = new TypeToken<Map<String, String>>() { }.getType();
    HashMap<String, String> newMap = gson.fromJson(json, typeOfHashMap);
    Tu fais référence à ça quand tu parles d'une certaine précaution à prendre ?
    A quoi sert ce code exactement ? Ne serait-ce pas plus simple de réécrire cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HashMap<String, String> newMap = gson.fromJson(json, HashMap.class);
    Je ne comprends pas... et pourquoi tu parles de type Map ?

    Pourrais-tu préciser ?
    Merci.

    D'autre part, c'est vrai que d'utiliser une librairie JSON est sympa, mais sur la partie cliente (les téléphones android), je vais devoir inclure cette librairie dans le programme, ce qui à mon avis risque d’alourdir mon apk.. enfin tout est relatif, mais bon.

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    La précaution a prendre c'est justement ce que tu pointes du doigt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashMap<String, String> newMap = gson.fromJson(json, HashMap.class);
    Pourquoi ça ne peut pas marcher?

    Car en fait lorsque tu fais
    gson.fromJson(json, HashMap.class);
    Gson va retourner une HashMap et pas une HashMap<String, String>.

    Il faut donc passer par un TypeToken<<Map<String, String>> qui ne sert uniquement qu'a donner un coup de pousse a Gson pour qu'il puisse déserialiser l'objet dans le bon type: a savoir HashMap<String, String> et pas HashMap.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Ah ok, eh bien merci du tuyau alors

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Si nous parlons de java.util.AbstractMap.SimpleEntry, elle est bien entendu sérialisable dans toutes les bibliothèques de base Java que j'ai jamais rencontrées.
    J'avoue que je sais pas dans quel cas tu en arrives à devoir sérialiser ça, mais si tu tombes dessus, ça devrait très bien marcher.

    Citation Envoyé par poussinvert Voir le message
    et pourquoi tu parles de type Map ?
    SimpleEntry est utilisé par les Map.

    Citation Envoyé par poussinvert Voir le message
    D'autre part, c'est vrai que d'utiliser une librairie JSON est sympa, mais sur la partie cliente (les téléphones android), je vais devoir inclure cette librairie dans le programme, ce qui à mon avis risque d’alourdir mon apk.. enfin tout est relatif, mais bon.
    C'est bien d'y penser, mais en Java ajouter des bibliothèques thirdparties est monnaie courante. gson offre en général un très bon rapport avantages/inconvénients, même pour les mobiles.

    Citation Envoyé par HerQuLe Voir le message
    La sérialisation Java n'est pas plus simple
    Pas de bibliothèque est toujours plus simple qu'une bibliothèque.

    Citation Envoyé par HerQuLe Voir le message
    et par défaut elle n'est pas spécialement efficace non plus
    Mapping 1:1 de données binaires vers une séquence d'octets, contre une réorganisation générique en vue d'une massive concaténation de Strings, suivi d'une copie de cette concaténation en caractères, vers des octets. C'est plus efficace en mémoire, plus efficace en temps d'exécution, ça ne peut pas être moins efficace en temps de transmission, et c'est très largement plus efficace en temps d'intégration.

    Citation Envoyé par HerQuLe Voir le message
    en plus de n'être pas interroperable.
    Soit.

    Je trouve, moi aussi, que sur le moyen terme, l'emploi d'une bibli comme gson enlève beaucoup de soucis. Mais à court terme, le soucis de l'intégration est bien plus gros que tu ne le prétends.
    Nous parlons à quelqu'un qui n'est pas arrivé à s'en sortir seul, donner la formule magique qui marche tout de suite de la sérialisation me semblait plus intéressant pour quelqu'un qui ne s'est pas intéressé un instant à l’interopérabilité.

    Mais c'est trop tard pour ça, alors tant pis.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Merci des infos, même si vous défendez deux idées différentes, ça m'en apprend beaucoup.
    De toute manière, avec le code que me donne HerQuLe, je reste bloqué sur une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    04-25 17:09:51.030: E/AndroidRuntime(21460): java.lang.ClassCastException: com.google.gson.internal.LinkedHashTreeMap cannot be cast to java.util.HashMap
    Citation Envoyé par thelvin Voir le message
    Si nous parlons de java.util.AbstractMap.SimpleEntry, elle est bien entendu sérialisable dans toutes les bibliothèques de base Java que j'ai jamais rencontrées.
    Pardon ? Il fallait le dire de suite si elle est serializable.
    Quand je tente monObjetSimpleEntry.getbytes() la méthode n'existe pas.... alors si c'est quand même possible, dis le moi

  14. #14
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    C'est normal: c'est pas comme ça qu'on serialise un objet
    Lis un tuto sur le sujet pour mieux comprendre il y en a des tonnes.


    La solution Gson c'est Objet -> String -> String serialisé (JSON)
    La solution native c'est Objet -> objet serialisé (format propriétaire Java)

    Avec Gson en effet tu as le coup de transformation de l'objet en String en plus.



    Pour ton erreur sans le code je ne peux pas dire.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par poussinvert Voir le message
    De toute manière, avec le code que me donne HerQuLe, je reste bloqué sur une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    04-25 17:09:51.030: E/AndroidRuntime(21460): java.lang.ClassCastException: com.google.gson.internal.LinkedHashTreeMap cannot be cast to java.util.HashMap
    J'ai pas gson sous la main, mais a priori, il utilise son propre mécanisme pour gérer les Map.
    Il vaut mieux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type typeOfMap = new TypeToken<Map<String, String>>() { }.getType();
    Map<String, String> newMap = gson.fromJson(json, typeOfMap);
    Citation Envoyé par poussinvert Voir le message
    Pardon ? Il fallait le dire de suite si elle est serializable.
    Quand je tente monObjetSimpleEntry.getbytes() la méthode n'existe pas.... alors si c'est quand même possible, dis le moi
    En même temps, on tombe jamais sur une SimpleEntry d'habitude -_-°. Je me disais que c'était peut-être une classe à toi, ou d'une bibli tierce.

    Les objets sérilisables s'utilisent avec ObjectOutputStream et ObjectInputStream.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Ok, j'oublie SimpleEntry, je me tourne vers les HashMap.

    A priori, pour serializer, il y a juste besoin de mettre "implements Serializable" à la classe, sauf que je ne peux pas modifier la classe HashMap puisque ce n'est pas moi qui l'ai créé..

    EDIT : j'ai réussi a faire fonctionner la sérialisation avec GSON, il fallait changer l'objet Map en HashMap Type typeOfHashMap = new TypeToken<HashMap<String, String>>() { }.getType(); MAIS j'aimerais bien savoir comment fonctionne la serialization java. Actuellement, j'utilise des objets InputStream et OutputStream.

  17. #17
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    Bah ça prend des objets et ca les transforme en byte[]
    Rien de plus simple


    Sauf qu'il y a plein de methodes différentes de transformer un objet en byte[].
    Rien que pour les String, ca dépend de l'encoding par exemple (UTF-8, ISOXXX peuvent donner des byte[] différent -> c'est pourquoi on a souvent des problèmes avec les accents etc)

    La JVM propose une implémentation par défaut de cette serialisation, il y a plein de tutoriels qui expliquent deja cela sur le net.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

  18. #18
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par poussinvert Voir le message
    A priori, pour serializer, il y a juste besoin de mettre "implements Serializable" à la classe, sauf que je ne peux pas modifier la classe HashMap puisque ce n'est pas moi qui l'ai créé..
    C'est juste l'implémentation de Map la plus standard fournie avec Java... Elle est déjà sérialisable, ne t'inquiète pas -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Je ne tomba pas sur des tutos, je tombe sur des stackoverflow.
    Par exemple :
    http://stackoverflow.com/questions/4...-map-from-disk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
       Map map = new HashMap();
            map.put("1",new Integer(1));
            map.put("2",new Integer(2));
            map.put("3",new Integer(3));
            FileOutputStream fos = new FileOutputStream("map.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(map);
            oos.close();
     
            FileInputStream fis = new FileInputStream("map.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Map anotherMap = (Map) ois.readObject();
            ois.close();
     
            System.out.println(anotherMap);
    A quoi sert FileOutputStream fos = new FileOutputStream("map.ser"); ? Moi j'ai un objet outputStream = mConnection.openOutputStream(); et je ne peux pas faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjectOutputStream o = mConnection.openOutputStream();
    Donc je ne peux pas envoyer d'objets...
    Et que veux dire new FileOutputStream("map.ser"); ? Mon objet, c'est un fichier maintenant ?

    Je vous assure que je ne trouve pas de tutos, mais juste plein de stackoverflow qui disent des choses différentes... donc s'il vous plait, est ce que quelqu'un pourrait me dire comment transférer un objet, sachant qu'a la base j'ai juste ma connexion StreamConnection connection.

    Merci encore

  20. #20
    Membre émérite
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Points : 2 271
    Points
    2 271
    Par défaut
    Tu peux essayer quelque chose du genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjectOutputStream oos = new ObjectOutputStream(streamConnection.openOutputStream());
    oos.writeObject(map);

    FileOutputStream c'est juste un truc qui permet d'écrire dans un fichier mais tu n'es pas obligé de l'utiliser: tu peux écrire dans n'importe quel OutputStream dont celui de ta connection bluetooth.
    React-Hebdo - Newsletter pour se tenir à jour sur l'écosystème React

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Envoyer fichier par Bluetooth Xe7
    Par curt25 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 06/10/2014, 12h54
  2. Envoyer fichier par bluetooth, PC vers mobiles
    Par dolnar dans le forum Windows Forms
    Réponses: 6
    Dernier message: 25/11/2009, 22h29
  3. Envoyé donnée par bluetooth sur samsung
    Par Laupif dans le forum Java ME
    Réponses: 1
    Dernier message: 22/11/2009, 16h48
  4. Réponses: 2
    Dernier message: 19/09/2007, 10h21
  5. Réception de données envoyées par bluetooth
    Par poupouille dans le forum Développement Mobile en Java
    Réponses: 6
    Dernier message: 29/07/2007, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo