Also bekomme ich das in Logcat:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
Ich weiß, dass dies bedeutet, dass meine Schülerklasse nicht serialisierbar ist, aber hier ist meine Schülerklasse:
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());
}
}
und dies ist der Code, der die Methode getIntent () verwendet:
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);
}
});
Bitte helfen Sie mir herauszufinden, was daran falsch ist.
Hier ist das ganze 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
quelle
quelle
DSLL
und was istGrade
?Antworten:
Ihre
DSLL
Klasse scheint eineDNode
statische innere Klasse zu haben undDNode
ist es nichtSerializable
.quelle
Caused by
Zeile vor. Das wird normalerweise auf das spezifische Problem hinweisen. Alle anderen Zeilengruppen der Stapelverfolgung stellen umschlossene Ausnahmen um die "echte" Ausnahme am unteren Rand der Ablaufverfolgung dar.Caused by: java.io.NotSerializableException:
Ihre OneThread-Klasse sollte auch Serializable implementieren. Alle Unterklassen und inneren Unterklassen müssen Serializable implementieren .
das ist für mich gearbeitet ...
quelle
Wenn Sie DNode nicht serialisierbar machen können, besteht eine gute Lösung darin, der Variablen "transient" hinzuzufügen.
Beispiel:
Dies ignoriert die Variable bei Verwendung von Intent.putExtra (...).
quelle
transient
Schlüsselwort in Java gibt an, dass ein Feld nicht serialisiert werden soll. Vollständige Antwort hier: stackoverflow.com/a/910522/1306012Wenn Ihr POJO ein anderes Modell enthält, sollte auch Serializable implementiert werden
quelle
Für mich wurde dies gelöst, indem die Variable innerhalb der Klasse vorübergehend gemacht wurde.
Code vor:
Code nach
quelle
Das Problem tritt auf, wenn Ihre benutzerdefinierte Klasse für die Eigenschaft eine andere Klasse hat, z. B. "Bitmap". Ich habe das Eigenschaftsfeld von "privates Bitmap-Foto" in "privates vorübergehendes Bitmap-Foto" geändert. Das Bild ist jedoch leer, nachdem ich in der EmpfängeraktivitätIntent () erhalten habe. Aus diesem Grund habe ich die benutzerdefinierte Klasse an die Absicht übergeben und außerdem ein Byte-Array aus dem Bild erstellt und separat an die Absicht übergeben:
selectedItem ist mein benutzerdefiniertes Objekt und getPlacePhoto ist seine Methode zum Abrufen von Bildern. Ich habe es bereits zuvor eingestellt und jetzt bekomme ich es zuerst, dann konvertiere ich es und übergebe es separat:
`
Dann erhalte ich in der Empfängeraktivität mein Objekt und das Bild als Byte-Array, dekodiere das Bild und setze es als Foto-Eigenschaft auf mein Objekt.
quelle
Die Ausnahme trat auf, weil eine der inneren Klassen oder andere referenzierte Klassen die serialisierbare Implementierung nicht implementiert haben. Stellen Sie daher sicher, dass alle referenzierten Klassen die serialisierbare Implementierung implementieren müssen.
quelle
Ich bin auch Phase dieser Fehler und ich bin ein wenig Änderung in modelClass, die Serializable Schnittstelle implementiert sind wie:
In dieser Model-Klasse wird auch die Parcelable-Schnittstelle mit der WriteToParcel () - Override-Methode implementiert
Dann habe ich gerade den Fehler "Ersteller erstellen" erhalten, damit CREATOR geschrieben und auch mit einem Modellklassen-Konstruktor mit Argumenten und ohne Argumente erstellt wird .
Hier,
ArtistTrackClass -> ModelClass
Konstruktor mit Parcel-Argumenten "Lesen Sie unsere Attribute" und writeToParcel () ist "Schreiben Sie unsere Attribute".
quelle
Die Grade-Klasse muss auch Serializable implementieren
quelle
Müssen alle Arraylisten in Serializable wif in Bean Klasse ändern:
quelle
Ich hatte das gleiche Problem, das Problem war, dass es einige innere Klassen mit dem statischen Schlüsselwort gab. Nach dem Entfernen des statischen Schlüsselworts begann es zu funktionieren und auch die innere Klasse sollte in Serializable implementiert werden
Problem Szenario
Gelöst von
quelle
In meinem Fall hatte ich zu implementieren
MainActivity
alsSerializable
auch. Ursache Ich musste einen Dienst von meinemMainActivity
:quelle