2015-08-20 1 views
2

j'ai un objet POJO défini comme ceci:Android putSerializable vs PutString

public class MYPOJO implements Serializable { 

    int myint; 
    String mystring; 
} 

puis quand im passer l'info à une activité que je fais ceci:

Intent i = new Intent(this, WearActivity.class); 
     Bundle b = new Bundle(); 
     MYPojo pojo = new MYPojo(); 
     pojo.mystring="cool"; 
     b.putSerializable("someString", pojo.mystring);//this line is my issue 
     i.putExtra("coolBundle",b); 

     startActivityForResult(i, 0); 

et de lire le 'someString' supplémentaire je fais:

Bundle b2 = getIntent().getBundleExtra("coolBundle"); 
     b2.getString("someString"); 

Alors maintenant sur ma question: est-ce qu'il y a vraiment une différence si je fais ce qui suit si si à la fin im toujours appeler pour la récupération b2.getString ("someString"):

b.putString("someString",pojo.mystring) 

vs

b.putSerializable("someString",pojo.mystring) ? 
+0

Votre POJO devrait probablement implémenter Parcelable. Plus peut être trouvé [ici] (http://stackoverflow.com/a/9323422/3109213 "SO Réponse avec l'exemple") – Stunna

+0

je réalise qu'il devrait mettre en œuvre paracelable pour l'efficacité et pour éviter la réflexion. Mais comme je veux savoir s'il y a des problèmes si j'utilise putString au lieu de putSerializable. C'est juste que j'ai hérité d'un projet n'utilisant pas de parcelable et je veux savoir les décisions de conception. Je les ai vus appeler putSerializable (...) et de le récupérer en faisant getString (...) et cela m'a semblé très étrange et je voulais une explication. Il n'y a pas de collision, les deux façons semblent fonctionner, mais y a-t-il une considération de conception à utiliser? – j2emanue

+1

Eh bien, je crois que vous pouvez passer dans une chaîne, car il s'agit essentiellement d'un tableau de caractères, ce qui lui permet d'être sérialisable. Pour moi, mettre un wrapper autour d'une chaîne met un wrapper autour d'un wrapper. Cela ressemble à un choix de conception, et quelque chose que je ne ferais pas – Stunna

Répondre

1

Dans la pratique, il n'y a pas une différence que vous verrez entre le passage d'une chaîne, ou passer un sérialisable chaîne entre les activités, en plus de "l'efficacité" ou l'utilisation possible de la réflexion/sécurité. Il pourrait s'agir plutôt d'un problème de conception et de principe que j'ai avec la transmission d'une chaîne en tant que "sérialisable". Essentiellement en passant dans une chaîne comme Serializable, Android/Java utilisera l'enveloppe de String, qui contient une structure de données de char [] derrière les scènes.

TLDR; Si votre POJO contenait plus de données, je vous recommande fortement d'implémenter Parcelable. Plus d'informations peuvent être trouvées dans cette réponse SO here. Mais si vous allez passer juste une chaîne, j'utiliserais les méthodes putString/getString que nous fournit Android.