2013-03-15 21 views
14

SABİT neden bilmiyorum zaman: ALTClassNotFoundException unmarshalling ve gerçekten

AT CEVAP ben parcelable nesneleri kullanmaya çalışıyor bir proje ve im için bir android uygulaması yazıyorum. 2 tane ölçeklenebilir dersim var. İlki sadece 2 argümanı olan normal bir sınıftır. İkincisi, ek özniteliklere sahip bir sınıf ve birinci sınıftan tür içeren bir liste ve ek bir Nesnesidir.

unmarshalling zaman ClassNotFoundException ve uygulama kapatır:

i başka bir etkinlik ikinci sınıfın bir nesnesi geçmek deneyin her zaman, android.os.BadParcelableException alır.

Şu an saatlerce aradım ve birden çok çözüm denedim ama hiçbir şey yardımcı olmadı.

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

Benim İkinci Sınıf:

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

beni yardımcı olun ben sadece başka bir etkinliğe birinci sınıf bir nesne geçerken Hata Burada .. kodumu

gel etmez.

Düzenleme: İşte benim 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 

Sonunda hata buldu ve ben sadece inanıyoruz heyecanlanıyorum olamaz FIX !!!

Neredeyse 1 1/2 gün boyunca arandı ve hepsi de tam olarak aynı sırada olmadıkları için readFromParcel veya writeToParcel'deki son iki yöntemi değiştirdi!

Buna inanamıyorum ama şimdi çalışıyor. Aynı hatayı alan herkes için writeToParcel ve readFromParcel sırasını kontrol edin. Thay'nin aynı sırayla olması gerekiyor.

İyi günler, Hristiyan Sonunda hata buldu ve ben sadece inanıyoruz heyecanlanıyorum olamaz **

+0

Özel durumunuzu tam olarak nereden aldığınızı görmek için logcat'inizi gönderin. – DigCamara

+0

yaptım, umarım –

+0

'u okuyabilirsin, girişinizin geçerliliğini proaktif ettiniz mi? – MemLeak

cevap

27

FIX !!!

Neredeyse 1 1/2 gün boyunca arandı ve hepsi de tam olarak aynı sırada olmadıkları için readFromParcel veya writeToParcel'deki son iki yöntemi değiştirdi!

Buna inanamıyorum ama şimdi çalışıyor. Aynı hatayı alan herkes için writeToParcel ve readFromParcel sırasını kontrol edin. Thay aynı sırayla olmalı.

{(int seçenekler, Parsel dest)

+0

Sadece buna gülüyordu öldü! Neşeli! SOF'ta mizah yumrudu; Beklenmeyen! – sud007

+0

LOL, bunu görmedim :)) – mohnage7

0

@Override public void writeToParcel (Christian Risch başına. Yine de, Belki cevabını kendisi kapatırız. Bu sitede düzen inanmadığını çözüldü) // alternatif

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

aynı şekilde writeToParcel ve readFromParcel yönetmek için deneyin ... ilk paket başladı. Sorunumu çözdüm.

İlgili konular