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:
- ¿Recomendaciones para datos persistentes en Android?
- Cómo pasar el objeto serializado gson a Intent en android?
- Almacenamiento en caché de los datos descargados de JSON en la base de datos SQLite - ¿es una buena idea?
- Subclase serializable de clase padre no serializable
- ¿Pasar el objeto GoogleApiClient a otra actividad?
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)
- ObjectInputStream me da un objeto vacío (pero el archivo leído no está vacío)
- Problemas de serialización java con JVM diferentes
- Serialización de objetos XML de Android
- Serialización de Java - deserialización de Android
- Serializador personalizado - deserializador utilizando GSON para una lista de BasicNameValuePairs
- ¿Cómo puedo serializar un objeto y guardarlo en un archivo de Android?
- ¿Cuál es la mejor manera de guardar el contenido de una ArrayList?
- Serialización v / s
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"
- Cómo detener logcat de desplazamiento en Android Studio
- Ubuntu – Error: No se pudo crear la tarjeta SD