donc je reçois ceci dans logcat:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
Je sais que cela signifie que ma classe d'élèves n'est pas sérialisable, mais c'est le cas, voici ma classe d'élèves:
import java.io.Serializable;
public class Student implements Comparable<Student>, Serializable{
private static final long serialVersionUID = 1L;
private String firstName, lastName;
private DSLL<Grade> gradeList;
public Student() {
firstName = "";
lastName = "";
gradeList = new DSLL<Grade>();
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public DSLL<Grade> getGradeList() {
return gradeList;
}
public void setGradeList(DSLL<Grade> gradeList) {
this.gradeList = gradeList;
}
public int compareTo(Student arg0) {
return this.lastName.compareTo(arg0.getLastName());
}
}
et voici le code qui utilise la méthode getIntent ():
public void onItemClick(AdapterView<?> parent, View viewClicked, int pos,
long id) {
Student clickedStudent = studentList.get(pos);
int position = pos;
Intent intent = new Intent(getActivity().getApplicationContext(), ShowStudentActivity.class);
Log.e("CINTENT","CREATED!!!");
intent.putExtra("clickedStudent",clickedStudent);
intent.putExtra("newStudentList",newStudentList);
intent.putExtra("position",position);
Log.e("putExtra","Passed");
Log.e("Start activity","passed");
startActivity(intent);
}
});
s'il vous plaît, aidez-moi à comprendre ce qui ne va pas avec cela.
voici l'ensemble du LogCat:
04-17 16:12:28.890: E/AndroidRuntime(22815): FATAL EXCEPTION: main
04-17 16:12:28.890: E/AndroidRuntime(22815): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Parcel.writeSerializable(Parcel.java:1181)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Parcel.writeValue(Parcel.java:1135)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Parcel.writeBundle(Parcel.java:507)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.content.Intent.writeToParcel(Intent.java:6111)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1613)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1422)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.app.Activity.startActivityForResult(Activity.java:3191)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:848)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.support.v4.app.Fragment.startActivity(Fragment.java:878)
04-17 16:12:28.890: E/AndroidRuntime(22815): at com.example.student_lists.MainActivity$DummySectionFragment$2.onItemClick(MainActivity.java:477)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.widget.AdapterView.performItemClick(AdapterView.java:292)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.widget.AbsListView$1.run(AbsListView.java:3168)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Handler.handleCallback(Handler.java:605)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Handler.dispatchMessage(Handler.java:92)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Looper.loop(Looper.java:137)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.app.ActivityThread.main(ActivityThread.java:4447)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.lang.reflect.Method.invokeNative(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.lang.reflect.Method.invoke(Method.java:511)
04-17 16:12:28.890: E/AndroidRuntime(22815): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-17 16:12:28.890: E/AndroidRuntime(22815): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-17 16:12:28.890: E/AndroidRuntime(22815): at dalvik.system.NativeStart.main(Native Method)
04-17 16:12:28.890: E/AndroidRuntime(22815): Caused by: java.io.NotSerializableException: com.resources.student_list.DSLL$DNode
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
04-17 16:12:28.890: E/AndroidRuntime(22815): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
04-17 16:12:28.890: E/AndroidRuntime(22815): at android.os.Parcel.writeSerializable(Parcel.java:1176)
android
android-intent
serialization
user2896762
la source
la source
DSLL
et qu'est-ce que c'estGrade
?Réponses:
Votre
DSLL
classe semble avoir uneDNode
classe interne statique, etDNode
ne l'est pasSerializable
.la source
Caused by
ligne. Cela va généralement pointer vers le problème spécifique. Toutes les autres strophes de la trace de pile représentent des exceptions encapsulées autour de l'exception "réelle" au bas de la trace.Caused by: java.io.NotSerializableException:
Votre classe OneThread doit également implémenter Serializable. Toutes les sous-classes et sous-classes internes doivent implémenter Serializable .
cela a fonctionné pour moi ...
la source
Si vous ne pouvez pas rendre DNode sérialisable, une bonne solution serait d'ajouter "transitoire" à la variable.
Exemple:
Cela ignorera la variable lors de l'utilisation de Intent.putExtra (...).
la source
transient
mot clé en Java est utilisé pour indiquer qu'un champ ne doit pas être sérialisé. Réponse complète ici: stackoverflow.com/a/910522/1306012si votre POJO contient un autre modèle à l'intérieur qui devrait également implémenter Serializable
la source
Pour moi, cela a été résolu en rendant la variable avec la classe transitoire.
Code avant:
code après
la source
Le problème se produit lorsque votre classe personnalisée a pour propriété une autre classe, par exemple "Bitmap". Ce que j'ai fait est de changer le champ de propriété de "photo Bitmap privée" à "photo Bitmap transitoire privée". Cependant, l'image est vide après avoir obtenuIntent () dans l'activité du récepteur. Pour cette raison, j'ai passé la classe personnalisée à l'intention et j'ai également créé un tableau d'octets à partir de l'image et je le transmets séparément à l'intention:
selectedItem est mon objet personnalisé et getPlacePhoto est sa méthode pour obtenir une image. Je l'ai déjà défini auparavant et maintenant je l'obtiens d'abord, puis je le convertis et je le transmets séparément:
»
Ensuite, dans l'activité du récepteur, j'obtiens mon objet et l'image sous forme de tableau d'octets, décode l'image et la définit sur mon objet en tant que propriété photo.
la source
L'exception s'est produite en raison du fait qu'aucune des classes internes ou autres classes référencées n'a implémenté l'implémentation sérialisable. Assurez-vous donc que toutes les classes référencées doivent implémenter l'implémentation sérialisable.
la source
Je suis également la phase de ces erreurs et je suis un petit changement dans modelClass qui est implémenté en interface sérialisable comme:
Dans cette classe Model, implémentez également l' interface Parcelable avec la méthode de substitution writeToParcel ()
Ensuite, il y a une erreur pour "créer le créateur", donc CREATOR est en écriture et crée également avec le constructeur de classe de modèle avec des arguments et sans arguments .
Ici,
ArtistTrackClass -> ModelClass
Constructeur avec des arguments Parcel "lire nos attributs" et writeToParcel () est "écrire nos attributs"
la source
la classe Grade doit également implémenter Serializable
la source
Besoin de changer tous les arraylist en wif sérialisable dans la classe de haricots:
la source
J'ai rencontré le même problème, le problème était qu'il y avait des classes internes avec le mot-clé static.Après avoir supprimé le mot-clé static, il a commencé à fonctionner et la classe interne devrait également implémenter Serializable
Scénario de problème
Résolu par
la source
Dans mon cas, j'ai dû mettre
MainActivity
en œuvreSerializable
aussi. Parce que j'avais besoin de démarrer un service à partir de monMainActivity
:la source