2013-03-15 30 views
14

FIXED理由がわからないとき:BOTTOMClassNotFoundExceptionが非整列化し、実際に

AT ANSWER私はparcelableオブジェクトを使用しようとしているプロジェクトとイムのためのAndroidアプリを書いています。 私は2つのパラカラブルクラスを持っています。最初は、引数が2つしかない通常のクラスです。 2番目のクラスは追加の属性を持つクラスで、最初のクラスの型のリストと追加のObjectです。

をアンマーシャリングするときにClassNotFoundExceptionとアプリが閉じ:

私は別の活動への第二のクラスのオブジェクトを渡すしようとするたびに、私はandroid.os.BadParcelableExceptionを取得します。

私は数時間前から検索し、複数の解決策を試みましたが何も助けませんでした。 ここでエラー私は別のアクティビティにファーストクラスのオブジェクトを渡すときに来doesntの..

私のコード:

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 私は最終的にエラーを発見し、私はそれを信じおかしくすることはできません!

ほぼ同じ順序でなかったので、readFromParcelまたはwriteToParcelで最後の2つのメソッドを切り替えることが必要でした。

信じられませんが、今は動作します。 同じ誤りが発生した場合は、writeToParcelとreadFromParcelの順番を確認してください。 Thayは同じ順序でなければなりません。

は素敵な一日を、キリスト教の私は最終的にエラーを発見し、私はそれを信じおかしくすることはできません**

+0

例外が発生している場所を正確に表示するには、logcatを投稿してください。 – DigCamara

+0

私は、あなたがそれを読むことができることを願って –

+0

あなたはあなたの入力の妥当性を証明しましたか? – MemLeak

答えて

27

FIX !!!

ほぼ同じ順序でなかったので、readFromParcelまたはwriteToParcelで最後の2つのメソッドを切り替えることが必要でした。

信じられませんが、今は動作します。同じミスをした人は、writeToParcelとreadFromParcelの順番を確認してください。 Thayは同じ順序でなければなりません。

(クリスチャン・リッシュは、自分でそれを解決した。それでも、私はこのサイトで清楚で信じている。たぶん彼は自分自身に答える閉じます)

+0

ちょうどその1つで笑って死んだ!陽気な!それはSOFのユーモアのパンチでした。予期せぬ! – sud007

+0

LOL、私はそれを見ていない:)) – mohnage7

0

@Override ます。public void writeToParcel(小包はdest、フラグをint型){ //が交互に最初のバンドルができ...

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

は同じようにwriteToParcelとreadFromParcelを管理してみてください。私の問題を解決しました。

関連する問題