Fragment de plante avec de Colis: impossible de maréchal de la valeur d'erreur lors de la méthode onPause est appelée
J'ai développé des applications android depuis un certain temps maintenant, mais seulement récemment obtenu en Fragments et donc je rencontre beaucoup de problèmes à apprendre comment travailler avec eux. L'une des activités de mes applications a quatre différents fragments, chacun de qui affiche une liste d'éléments à l'utilisateur. Chaque fragment est créé au premier et n'est affiché qu'une fois sélectionné et caché lorsqu'un onglet est sélectionné. Une fois que chacun de ces fragments sont créé une liste de tableaux de JSONObjects est passé comme argument pour le fragment comme suit
ft = fm.beginTransaction();
if(currentFragment !=null){
ft.hide(currentFragment);
}
if(whereFragment !=null){
ft.show(whereFragment);
}else{
if(mPlaceList.size()>0){
Bundle bundle = new Bundle();
bundle.putSerializable("array", mPlaceList);
whereFragment = new WhereFragment();
whereFragment.setArguments(bundle);
ft.add(R.id.newpost_container,whereFragment, "whereFragment");
}
}
ft.commit();
currentFragment = whereFragment;
La liste de tableaux est reçu dans le fragment et le tout fonctionne très bien.
actList = (ArrayList<JSONObject>) getArguments().getSerializable("array");
doingAdapter = new DoingAdapter(getActivity(), actList);
actListView.setAdapter(doingAdapter);
Il y a un bouton dans l'activité parent qui lance l'appareil photo de l'appareil. Une fois que cela arrive et la méthode onPause dans le fragment est appelé l'application se bloque et j'ai cette erreur dans mon Logcat
Logcat:
06-23 17:51:31.190: E/ACRA(29221): com.parspake.anar fatal error : Parcel: unable to marshal value {"type":"act","id":"5327f9827f49143f3a001c76","title":"خونه","actType":"where"}
06-23 17:51:31.190: E/ACRA(29221): java.lang.RuntimeException: Parcel: unable to marshal value {"type":"act","id":"5327f9827f49143f3a001c76","title":"خونه","actType":"where"}
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeValue(Parcel.java:1235)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeList(Parcel.java:622)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeValue(Parcel.java:1195)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeMapInternal(Parcel.java:591)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Bundle.writeToParcel(Bundle.java:1619)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeBundle(Parcel.java:605)
06-23 17:51:31.190: E/ACRA(29221): at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:132)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeTypedArray(Parcel.java:1102)
06-23 17:51:31.190: E/ACRA(29221): at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:368)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeParcelable(Parcel.java:1254)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeValue(Parcel.java:1173)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeMapInternal(Parcel.java:591)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Bundle.writeToParcel(Bundle.java:1619)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Parcel.writeBundle(Parcel.java:605)
06-23 17:51:31.190: E/ACRA(29221): at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2096)
06-23 17:51:31.190: E/ACRA(29221): at android.app.ActivityThread$StopInfo.run(ActivityThread.java:2918)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Handler.handleCallback(Handler.java:615)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Handler.dispatchMessage(Handler.java:92)
06-23 17:51:31.190: E/ACRA(29221): at android.os.Looper.loop(Looper.java:137)
06-23 17:51:31.190: E/ACRA(29221): at android.app.ActivityThread.main(ActivityThread.java:4827)
06-23 17:51:31.190: E/ACRA(29221): at java.lang.reflect.Method.invokeNative(Native Method)
06-23 17:51:31.190: E/ACRA(29221): at java.lang.reflect.Method.invoke(Method.java:511)
06-23 17:51:31.190: E/ACRA(29221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-23 17:51:31.190: E/ACRA(29221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
06-23 17:51:31.190: E/ACRA(29221): at dalvik.system.NativeStart.main(Native Method)
J'ai été en regardant autour de stackoverflow et je vois quelques questions à des problèmes similaires à la mienne, cependant je n'arrive pas à prendre quoi que ce soit de l'un d'eux qui pourraient m'aider dans ma situation. Je ne obtenez l'essentiel de la question avec le fragment en essayant de sauver de son état et de ne pas pouvoir sérialiser mes objets json mais ce serait génial si quelqu'un pouvait m'aider à travailler avec Serializable ou Parcelable interfaces pour résoudre mon problème, ce serait super. J'ai également mis en œuvre Serializable dans les deux fragment et de l'activité, il a été suggéré par d'autres.
OriginalL'auteur Nami Alejandro Salimi | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Si vous avez déjà obtenir les données dont vous avez besoin, puis il suffit de supprimer les données de bundle.
Im assez sûr maintenant que par la purge de chaque valeur de mon bundle je ne plus recevoir de maréchal des erreurs, mais quelqu'un pourrait-il expliquer pourquoi chaque valeur doit être supprimée, même si le groupe n'est jamais touché à nouveau après avoir été lu? Très curieux!
j'ai été faire cette erreur lorsque je démarre une activité, mais celui-ci a fonctionné. merci
Super réponse, je n'étais pas abe pour réparer cette erreur jusqu'à ce que cette réponse. Pourquoi est-ce nécessaire de supprimer les données à partir du bundle?
OriginalL'auteur Lee Jeongmin
Bien, j'ai réussi à trouver un moyen de sortir de ce fait, il peut ne pas être la plus standard de la manière de faire les choses, mais il en a résolu mon problème et peut aider les autres dans une certaine mesure.
Ce que j'ai fait au lieu de convertir le JSONArray qui a été reçu à partir de l'API dans un JSON liste de tableaux et ensuite l'envoyer pour le fragment, j'ai converti le tableau JSON à la chaîne et l'a envoyé avec le bundle.
Dans le fragment que j'ai reçu le paquet et a converti la chaîne en JSONArray.
Puis j'ai réitéré par le biais de la JSONArray et l'ont converti en un JSONObject ArrayList. Et afin de conserver les modifications apportées à la ma liste après le fragment a été en cours d'utilisation, j'ai converti la liste de tableaux de retour dans une JSONArray et l'a sauvé.
Maintenant que l'état a été enregistré, il pourrait facilement être restaurée dans le onCreateView méthode comme suit
De cette façon je n'aurais pas à traiter la question de la prise de mon JSONObjects Serializable ou Parcelable
OriginalL'auteur Nami Alejandro Salimi