Passer arraylist de l'utilisateur des objets définis à l'Intention android
Je suis en train de passer d'une structure de liste de tableaux à l'intention comme suit,
Dans l'appel de la fonction, je suis en utilisant
ArrayList<Parliament> s=(ArrayList<Parliament>)msg.obj;
Intent i = new Intent(ReadTasks.this, GenrateTasks.class);
i.putExtra("tasks", s);
startActivity(i);
Et la fonction appelée
Bundle b = getIntent().getExtras();
if(b!=null)
{
ArrayList<Parliament> as = (ArrayList<Parliament>)b.getSerializable("tasklist");
}
J'ai donné implémente serializable dans les deux classes, mais suis incapable de marshall.. moment de l'exécution d'erreur dans l'appel de la fonction à la ligne de démarrage de l'activité. S'il vous plaît aider de la façon de procéder!
Edit 1: trace de la Pile:
04-01 22:21:53.999: E/AndroidRuntime(2078): FATAL EXCEPTION: main
04-01 22:21:53.999: E/AndroidRuntime(2078): java.lang.RuntimeException: Parcel: unable to marshal value com.viralm.readjson.Parliament@413597f0
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Parcel.writeValue(Parcel.java:1137)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Parcel.writeList(Parcel.java:524)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Parcel.writeValue(Parcel.java:1097)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Parcel.writeBundle(Parcel.java:507)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.content.Intent.writeToParcel(Intent.java:5846)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1606)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.app.Activity.startActivityForResult(Activity.java:3190)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.app.Activity.startActivity(Activity.java:3297)
04-01 22:21:53.999: E/AndroidRuntime(2078): at com.viralm.readjson.ReadTasks$1.handleMessage(ReadTasks.java:61)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.os.Looper.loop(Looper.java:137)
04-01 22:21:53.999: E/AndroidRuntime(2078): at android.app.ActivityThread.main(ActivityThread.java:4340)
04-01 22:21:53.999: E/AndroidRuntime(2078): at java.lang.reflect.Method.invokeNative(Native Method)
04-01 22:21:53.999: E/AndroidRuntime(2078): at java.lang.reflect.Method.invoke(Method.java:511)
04-01 22:21:53.999: E/AndroidRuntime(2078): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-01 22:21:53.999: E/AndroidRuntime(2078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-01 22:21:53.999: E/AndroidRuntime(2078): at dalvik.system.NativeStart.main(Native Method)
Mon Parliament classe est d'avoir 5 cordes avec ses setters et getters!
veuillez poster le complet stacktrace et ajouter la classe Parlement
androidhub.wordpress.com/2011/08/03/...
androidhub.wordpress.com/2011/08/03/...
OriginalL'auteur bharath | 2013-04-01
Vous devez vous connecter pour publier un commentaire.
Puisque vous utilisez Serializable, vous ne pouvez pas le faire comme maintenant. Je vous suggère d'envelopper votre liste de tableaux de classe par exemple nommée DataWrapper. Cette classe doit implémenter Serializable et puis vous êtes en mesure de passer à ArrayList par l'Intention.
Exemple:
Et une utilisation:
et récupération:
Remarque:
Il y a aussi l'option d'utiliser Parcelable interface. Si vous allez l'utiliser, vous pouvez mettre et récupérer votre liste de tableaux avec ces méthodes:
Est généralement recommandé d'utiliser l'interface Parcelable qui est directement désigné pour le passage des objets par le biais d'Activités, mais j'ai l'habitude d'utiliser l'interface Serializable et toujours faire un truc.
Aussi être prudent sur les fautes de frappe. Vous mettez en objet avec les principaux
task
et vous devez le récupérer avec même clé et pas avec tasklist.Parcelable
.Salut merci pour la réponse, quand j'ai essayé de mettre en œuvre la création d'une enveloppe et d'exécution sérialisable seulement en ce que, je suis "04-01 22:39:13.499: E/AndroidRuntime(2202): java.lang.RuntimeException: Parcelable rencontré IOException l'écriture de la sérialisation de l'objet (nom = com.viralm.readjson.DataWrapper) ", que faire?
serializable nécessité de mettre en œuvre les deux classes, le wrapper et aussi le Parlement.
et vous mettre l'objet d'une intention de ne pas le bundle. donc vous devez appeler
getIntent().getSerializableExtra("key")
;Salut merci beaucoup, a travaillé comme un charme!! 🙂
OriginalL'auteur Simon Dorociak
Mise en œuvre de Serializable est jugé faible performance où, comme Parcelable est encouragée.
J'ai eu exactement la même question, et toujours à harceler avec la
Parcelable
, j'ai trouvé que la variables statiques ne sont pas une mauvaise idée pour la tâche.Vous pouvez simplement créer un
et de l'utiliser d'ailleurs via
MyRefActivity.myObjects
Je n'étais pas sûr de savoir ce que les variables statiques impliquent dans le contexte d'une application avec des activités. Si vous aussi vous avez des doutes à propos de ceci ou sur les aspects de la performance de cette approche, voir:
Acclamations.
OriginalL'auteur Orkun Ozen
Faire de votre classe d'objet Parcelable plus tard, essayez d'utiliser
OriginalL'auteur Soniya Mohan