ClassNotFoundException cuando unmarshalling y realmente no sé por qué

FIJO: RESPUESTA EN PARTE INFERIOR

Estoy escribiendo una aplicación android para un proyecto y estoy tratando de utilizar objetos parcelables. Tengo 2 clases parcelables. La primera es una clase normal con sólo 2 argumentos. El segundo es una clase con atributos adicionales y una lista con el tipo de la primera clase y un objeto adicional de la misma.

Cada vez que intento pasar un objeto de la segunda clase a otra actividad, obtengo android.os.BadParcelableException: ClassNotFoundException cuando unmarshalling

Y la aplicación se cierra.

Busqué horas y probé varias soluciones, pero nada me ayudó. El error no viene cuando sólo paso un objeto de la primera clase a otra actividad.

Aquí mi código:

package de.softwareproject.v3.testclasses; import android.os.Parcel; import android.os.Parcelable; public class Cart implements Parcelable { private String name; private Integer priceInCents; public Cart() {} public Cart(Parcel in){ readFromParcel(in); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getPriceInCents() { return priceInCents; } public void setPriceInCents(Integer priceInCents) { this.priceInCents = priceInCents; } public static final Parcelable.Creator<Cart> CREATOR = new Parcelable.Creator<Cart>() { @Override public Cart createFromParcel(Parcel source) { return new Cart(source); } @Override public Cart[] newArray(int size) { return new Cart[size]; } }; @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(priceInCents); } private void readFromParcel(Parcel in) { name = in.readString(); priceInCents = in.readInt(); } } 

Mi segunda clase:

 package de.softwareproject.v3.testclasses; import java.util.ArrayList; import java.util.List; import android.os.Parcel; import android.os.Parcelable; public class CurrentUser implements Parcelable { private String username; private String eMail; private String password; private List<Cart> carts; private Cart activeCart; public CurrentUser() {} public CurrentUser(Parcel in) { readFromParcel(in); } private void readFromParcel(Parcel in) { username = in.readString(); eMail = in.readString(); password = in.readString(); activeCart = in.readParcelable(de.softwareproject.v3.testclasses.Cart.class.getClassLoader()); if (carts == null){ carts = new ArrayList<Cart>(); } in.readTypedList(carts, Cart.CREATOR); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String geteMail() { return eMail; } public void seteMail(String eMail) { this.eMail = eMail; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<Cart> getCarts() { return carts; } public void setCarts(List<Cart> carts) { this.carts = carts; } public Cart getActiveCart() { return activeCart; } public void setActiveCart(Cart activeCart) { this.activeCart = activeCart; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(username); dest.writeString(eMail); dest.writeString(password); dest.writeTypedList(carts); dest.writeParcelable(activeCart, flags); } public static final Parcelable.Creator<CurrentUser> CREATOR = new Parcelable.Creator<CurrentUser>() { @Override public CurrentUser createFromParcel(Parcel in) { return new CurrentUser(in); } @Override public CurrentUser[] newArray(int size) { return new CurrentUser[size]; } }; } 

Por favor, ayúdame.

Editar: Aquí mi Logcat

  03-15 16:24:08.139: E/Parcel(689): Class not found when unmarshalling: ??, e: java.lang.ClassNotFoundException: ?? 03-15 16:24:08.149: D/AndroidRuntime(689): Shutting down VM 03-15 16:24:08.149: W/dalvikvm(689): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 03-15 16:24:08.229: E/AndroidRuntime(689): FATAL EXCEPTION: main 03-15 16:24:08.229: E/AndroidRuntime(689): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.softwareproject.v3/de.softwareproject.v3.Startpage}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: ?? 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread.access$600(ActivityThread.java:122) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Handler.dispatchMessage(Handler.java:99) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Looper.loop(Looper.java:137) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread.main(ActivityThread.java:4340) 03-15 16:24:08.229: E/AndroidRuntime(689): at java.lang.reflect.Method.invokeNative(Native Method) 03-15 16:24:08.229: E/AndroidRuntime(689): at java.lang.reflect.Method.invoke(Method.java:511) 03-15 16:24:08.229: E/AndroidRuntime(689): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 03-15 16:24:08.229: E/AndroidRuntime(689): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-15 16:24:08.229: E/AndroidRuntime(689): at dalvik.system.NativeStart.main(Native Method) 03-15 16:24:08.229: E/AndroidRuntime(689): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: ?? 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Parcel.readParcelable(Parcel.java:1966) 03-15 16:24:08.229: E/AndroidRuntime(689): at de.softwareproject.v3.testclasses.CurrentUser.readFromParcel(CurrentUser.java:26) 03-15 16:24:08.229: E/AndroidRuntime(689): at de.softwareproject.v3.testclasses.CurrentUser.<init>(CurrentUser.java:19) 03-15 16:24:08.229: E/AndroidRuntime(689): at de.softwareproject.v3.testclasses.CurrentUser$1.createFromParcel(CurrentUser.java:80) 03-15 16:24:08.229: E/AndroidRuntime(689): at de.softwareproject.v3.testclasses.CurrentUser$1.createFromParcel(CurrentUser.java:1) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Parcel.readParcelable(Parcel.java:1992) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Parcel.readValue(Parcel.java:1854) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Parcel.readMapInternal(Parcel.java:2094) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Bundle.unparcel(Bundle.java:223) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.os.Bundle.getParcelable(Bundle.java:1158) 03-15 16:24:08.229: E/AndroidRuntime(689): at de.softwareproject.v3.Startpage.onCreate(Startpage.java:34) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.Activity.performCreate(Activity.java:4465) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 03-15 16:24:08.229: E/AndroidRuntime(689): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 03-15 16:24:08.229: E/AndroidRuntime(689): ... 11 more 03-15 16:24:10.289: I/Process(689): Sending signal. PID: 689 SIG: 9 

FIX Finalmente encontré el error y no puedo creerlo!

Se buscó casi 1 1/2 días y todo lo que necesitaba fue cambiar los dos últimos métodos en readFromParcel o writeToParcel porque no estaban en el mismo orden!

No puedo creerlo, pero ahora funciona. Para cada uno que comete el mismo error, compruebe el orden de writeToParcel y readFromParcel. Deben estar en el mismo orden.

Que tengas un buen día, Christian **

2 Solutions collect form web for “ClassNotFoundException cuando unmarshalling y realmente no sé por qué”

FIX Finalmente encontré el error y no puedo creerlo!

Se buscó casi 1 1/2 días y todo lo que necesitaba fue cambiar los dos últimos métodos en readFromParcel o writeToParcel porque no estaban en el mismo orden!

No puedo creerlo, pero ahora funciona. Para cada uno que comete el mismo error, compruebe el orden de writeToParcel y readFromParcel. Deben estar en el mismo orden.

(Christian Risch lo resolvió por sí mismo, pero creo en la pulcritud en este sitio, tal vez él mismo cierre la respuesta)

@Override public void writeToParcel (Parcel dest, int flags) {// podría agrupar primero …

  dest.writeString(songs_id); dest.writeInt(check_song_favorite); dest.writeString(name); dest.writeString(track_image); dest.writeString(created_date); dest.writeString(status); dest.writeString(track); dest.writeString(artist_name); dest.writeString(uploader_name); dest.writeString(play_count); dest.writeString(share_count); dest.writeString(favorite_count); dest.writeString(genre); dest.writeString(user_id); dest.writeString(offline_download); dest.writeString(slug); } /** * Creates ArtistParcelable model from Parcel. */ public static final Parcelable.Creator<PlayerData> CREATOR = new Creator<PlayerData>() { @Override public PlayerData createFromParcel(Parcel source) { String songs_id = source.readString(); int check_song_favorite = source.readInt(); String name = source.readString(); String track_image = source.readString(); String created_date = source.readString(); String status = source.readString(); String track = source.readString(); String artist_name = source.readString(); String uploader_name = source.readString(); String play_count = source.readString(); String share_count = source.readString(); String favorite_count = source.readString(); String genre = source.readString(); String user_id = source.readString(); String offline_download = source.readString(); String slug = source.readString(); return new PlayerData(check_song_favorite,songs_id, name, created_date, track_image, status, track, artist_name, uploader_name, play_count, share_count, favorite_count,genre,user_id,offline_download,slug); } @Override public PlayerData[] newArray(int size) { return new PlayerData[size]; } }; 

Tratar de administrar writeToParcel y readFromParcel de la misma manera. Resuelto mi problema.

  • Código de tipo desconocido del paquete
  • Clase no encontrada cuando Unmarshalling Android Intent Parcelable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.