Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Parcelable encontrado IOException writing serializable object getactivity ()

Así que estoy consiguiendo esto en logcat:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.resources.student_list.Student) 

Sé que esto significa que mi clase de estudiante no es serializable, pero es, aquí está mi clase de estudiante:

 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()); } } 

Y este es el código que está utilizando el método 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); } }); 

Por favor ayúdame a averiguar qué está mal con esto.

Aquí está todo el 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) 

4 Solutions collect form web for “Parcelable encontrado IOException writing serializable object getactivity ()”

 Caused by: java.io.NotSerializableException: com.resources.student_list.DSLL$DNode 

Su clase DSLL parece tener una clase interna estática DNode y DNode no es Serializable .

Si usted no puede hacer DNode serializable una buena solución sería agregar "transitoria" a la variable.

Ejemplo:

 public static transient DNode dNode = null; 

Esto ignorará la variable cuando utilice Intent.putExtra (…).

El problema se produce cuando su clase personalizada tiene para la propiedad alguna otra clase, por ejemplo, "Bitmap". Lo que hice fue cambiar el campo de propiedad de "foto de mapa de bits privada" a "foto de mapa de bits transitoria privada". Sin embargo, la imagen está vacía después de getIntent () en la actividad del receptor. Debido a esto pasé la clase de encargo a la intención y también he creado una matriz del byte de la imagen y la paso separatly a la intención:

SelectedItem es mi objeto personalizado y getPlacePhoto es su método para obtener la imagen. Ya lo he configurado antes y ahora lo recibo primero que convertirlo y pasarlo separadamente:

  Bitmap image = selectedItem.getPlacePhoto(); image.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); Intent intent = new Intent(YourPresentActivity.this, TheReceiverActivity.class); intent.putExtra("selectedItem", selectedItem); intent.putExtra("image", byteArray); startActivity(intent); 

Entonces en la actividad del receptor consigo mi objeto y la imagen como matriz del byte, decodifico la imagen y la fijo a mi objeto como propiedad de la foto.

  Intent intent = getIntent(); selectedItem = (ListItem) intent.getSerializableExtra("selectedItem"); byte[] byteArray = getIntent().getByteArrayExtra("image"); Bitmap image = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); selectedItem.setPhoto(image); 

También estoy fase de estos errores y estoy un poco de cambio en modelClass que se implementan Interfaz serializable como:

En esa clase de modelo también implementar Parcelable interfaz con writeToParcel () método de anulación

Entonces sólo tiene error para "crear creador" para CREATOR es escribir y también crear con modelclass contructor con argumentos y sin argumentos ..

  @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(id); dest.writeString(name); } protected ArtistTrackClass(Parcel in) { id = in.readString(); name = in.readString(); } public ArtistTrackClass() { } public static final Creator<ArtistTrackClass> CREATOR = new Creator<ArtistTrackClass>() { @Override public ArtistTrackClass createFromParcel(Parcel in) { return new ArtistTrackClass(in); } @Override public ArtistTrackClass[] newArray(int size) { return new ArtistTrackClass[size]; } }; 

Aquí,

ArtistTrackClass -> ModelClass

Constructor con Parcel argumentos "leer nuestros atributos" y writeToParcel () es "escribir nuestros atributos"

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.