抛出ClassNotFoundException,实际上不知道为什么

固定:在底部答案

我正在编写一个项目的Android应用程序,即时尝试使用parcelable对象。 我有2个可出租的class级。 第一个是只有两个参数的普通类。 第二个是一个带有附加属性的类,第一个类有一个types的列表和一个额外的Object。

每次我尝试将第二个类的对象传递给另一个Activity时,我得到android.os.BadParcelableException:解组时发生ClassNotFoundException

和应用程序closures。

我search了几个小时,并尝试了多种解决scheme,但没有任何帮 错误没有来,当我只传递一个对象的第一类到另一个活动..

在这里我的代码:

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

我的第二类:

 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]; } }; } 

请帮帮我。

编辑:在这里我的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我终于find了错误,我只是不能相信它!

search了将近1/2天,所需要的只是切换readFromParcel或writeToParcel中的最后两个方法,因为它们不是完全相同的顺序!

不能相信,但现在它工作。 对于每一个得到相同错误的人,检查writeToParcel和readFromParcel的顺序。 Thay必须以相同的顺序。

有一个愉快的一天,基督教**

    FIX我终于find了错误,我只是不能相信它!

    search了将近1/2天,所需要的只是切换readFromParcel或writeToParcel中的最后两个方法,因为它们不是完全相同的顺序!

    不能相信,但现在它工作。 对于每一个得到相同错误的人,检查writeToParcel和readFromParcel的顺序。 Thay必须以相同的顺序。

    (Christian Risch自己解决了这个问题,但是我相信这个网站很整洁,也许他会自己解决这个问题)

    @Override public void writeToParcel(Parcel dest,int flags){//可以select先捆绑…

      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]; } }; 

    尝试以相同的方式pipe理writeToParcel和readFromParcel。 解决了我的问题。