FIXED: ANTWORT UNTENClassNotFoundException wenn unmarshalling und weiß wirklich nicht, warum
ich ein Android-App für ein Projekt und im schreibe versuchen parcel Objekte zu verwenden. Ich habe 2 parcalable Klassen. Die erste ist eine normale Klasse mit nur 2 Argumenten. Der zweite ist eine Klasse mit zusätzlichen Attributen und einer Liste mit Typ aus der ersten Klasse und einem zusätzlichen Objekt davon.
Jedes Mal, wenn ich versuche, ein Objekt der zweiten Klasse in einer anderen Aktivität zu passieren, erhalte ich android.os.BadParcelableException: ClassNotFoundException wenn unmarshalling
und die App geschlossen wird.
Ich suchte seit Stunden und versuchte mehrere Lösungen, aber nichts half. Der Fehler kommt nicht, wenn ich nur ein Objekt der ersten Klasse auf einem andere Tätigkeit passieren ..
Hier meinen Code:
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();
}
}
Meine zweite Klasse:
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];
}
};
}
mir bitte helfen.
Edit: Hier ist mein 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 ich den Fehler endlich gefunden und ich kann freaking es einfach nicht glauben !!!
Gesucht für fast 1 1/2 Tage und alles, was es brauchte, war die letzten beiden Methoden in readFromParcel oder writeToParcel, weil sie nicht in der gleichen Reihenfolge waren !!
Ich kann es nicht glauben, aber jetzt funktioniert es. Überprüfen Sie für jeden, der den gleichen Fehler hat, die Reihenfolge von writeToParcel und readFromParcel. Thay müssen in der gleichen Reihenfolge sein.
Haben Sie einen schönen Tag, Christian **
Veröffentlichen Sie Ihr Logcat, um genau zu sehen, wo Sie die Ausnahme erhalten. – DigCamara
ich tat, hoffe du kannst es lesen –
hast du die Gültigkeit deiner Eingabe überprüft? – MemLeak