więc otrzymuję to w logcat:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student)
Wiem, że to oznacza, że mojej klasy studenckiej nie można serializować, ale oto moja klasa studencka:
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());
}
}
a to jest kod, który używa metody 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);
}
});
proszę, pomóż mi dowiedzieć się, co jest w tym złego.
oto cały 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
źródło
źródło
DSLL
i co jestGrade
?Odpowiedzi:
Twoja
DSLL
klasa wydaje się miećDNode
statyczną klasę wewnętrzną, a niąDNode
nie jestSerializable
.źródło
Caused by
linii. Zwykle będzie to wskazywać na konkretny problem. Wszystkie pozostałe sekcje śledzenia stosu reprezentują zawinięte wyjątki wokół „rzeczywistego” wyjątku na dole śledzenia.Caused by: java.io.NotSerializableException:
Twoja klasa OneThread powinna również implementować Serializable. Wszystkie podklasy i wewnętrzne podklasy muszą implementować Serializable .
to działa dla mnie ...
źródło
Jeśli nie możesz umożliwić serializacji DNode, dobrym rozwiązaniem byłoby dodanie „przejściowej” do zmiennej.
Przykład:
Spowoduje to zignorowanie zmiennej podczas korzystania z Intent.putExtra (...).
źródło
transient
kluczowe w Javie służy do wskazania, że pole nie powinno być serializowane. Pełna odpowiedź tutaj: stackoverflow.com/a/910522/1306012jeśli POJO zawiera jakikolwiek inny model wewnątrz, który powinien również implementować Serializable
źródło
Dla mnie zostało to rozwiązane przez uczynienie zmiennej w klasie przejściową.
Kod przed:
kod po
źródło
Problem występuje, gdy klasa niestandardowa ma właściwość inną klasę, np. „Bitmap”. Zmieniłem pole właściwości z „prywatnego zdjęcia bitmapowego” na „prywatne przejściowe zdjęcie bitmapy”. Jednak obraz jest pusty po wykonaniu funkcji getIntent () w działaniu odbiornika. Z tego powodu przekazałem klasę niestandardową do intencji, a także utworzyłem tablicę bajtów z obrazu i przekazałem ją oddzielnie do intencji:
selectedItem to mój niestandardowy obiekt, a getPlacePhoto to jego metoda na uzyskanie obrazu. Już to ustawiłem, a teraz po prostu go najpierw otrzymuję, niż konwertuję i przekazuję osobno:
`
Następnie w aktywności odbiornika otrzymuję obiekt i obraz jako tablicę bajtów, dekoduję obraz i ustawiam go na mój obiekt jako właściwość foto.
źródło
Wyjątek wystąpił z powodu faktu, że żadna z klas wewnętrznych lub innych klas, do których się odwołuje, nie zaimplementowała implementacji możliwej do serializacji. Dlatego upewnij się, że wszystkie klasy, do których się odwołujesz, muszą implementować implementację możliwą do serializacji.
źródło
Jestem również fazą tych błędów i jestem trochę zmiany w modelClass, które są zaimplementowane Serializowalny interfejs, taki jak:
W tej klasie Model zaimplementuj również interfejs Parcelable z metodą override writeToParcel ()
Wtedy właśnie pojawił się błąd „utwórz twórcę”, więc TWÓRCA pisze, a także tworzy z konstruktorem klasy modelowej z argumentami i bez argumentów .
Tutaj,
ArtistTrackClass -> ModelClass
Konstruktor z argumentami Parcel „przeczytaj nasze atrybuty” i writeToParcel () to „zapisz nasze atrybuty”
źródło
klasa Grade musi również implementować Serializable
źródło
Musisz zmienić wszystkie arraylist na serializowalny wif w klasie bean:
źródło
Napotkałem ten sam problem, problem polegał na tym, że istnieje kilka klas wewnętrznych ze słowem kluczowym static.Po usunięciu słowa kluczowego static zaczęło działać, a także klasa wewnętrzna powinna być implementowana do Serializable
Scenariusz problemu
Rozwiązany przez
źródło
W moim przypadku miałem do wdrożenia
MainActivity
jakoSerializable
zbyt. Ponieważ musiałem uruchomić usługę z mojegoMainActivity
:źródło