2014-03-28 40 views
1

我在Stackoverflow中查找了「在解組時未找到的類」問題的所有答案,但我沒有找到解決方案。我嘗試過任何變種,但沒有奏效。 我獲得以下錯誤:Android Intent Parcelable:解組時未找到類

enter image description here

這裏我的課:

類別之一:第二

public class Class1 implements Parcelable, Serializable { 
    private static final long serialVersionUID = -3892107077759983950L; 
    private long id; 
    private ArrayList<Class2> details; 
    public Class1(long id, ArrayList<Class2> details) { 
     this.id = id; 
     this.details = details; 
    } 
    public Class1(Parcel in) { 
     this.id = in.readLong(); 
     details = new ArrayList<Class2>((Collection<? extends Class2>) Arrays.asList(in.readParcelableArray(Class2.class.getClassLoader()))); 
//  details = (ArrayList<OrderDetail>)in.readSerializable(); 
//  details = in.readArrayList(Class2.class.getClassLoader()); 
//  in.readList(details, Class2.class.getClassLoader()); 
//  in.readTypedList(details, Class2.CREATOR); 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeLong(id); 
//  dest.writeSerializable(details);   
//  dest.writeList(details); 
//  dest.writeTypedList(details); 
     dest.writeParcelableArray(ordDetailListToArr(), flags); 
    } 
    @Override 
    public int describeContents() { return 0; } 
    public static final Parcelable.Creator<Class1> CREATOR 
    = new Parcelable.Creator<Class1>() { 
     public Class1 createFromParcel(Parcel in) { 
      return new Class1(in); 
     } 
     public Class1[] newArray(int size) { 
      return new Class1[size]; 
     } 
    }; 
} 

類:

public class Class2 implements Parcelable, Serializable { 
    private static final long serialVersionUID = 3242734374178052427L; 
    private long orderId; 
    private Class3 Class3; 
    public Class2(long orderId, Class3 Class3) { 
     this.orderId = orderId; 
     this.Class3 = Class3; 
    } 
    private Class2(Parcel in) { 
     this.orderId = in.readLong(); 
     this.Class3 = (Class3) in.readParcelable(Class3.class.getClassLoader()); 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeLong(orderId); 
     dest.writeParcelable(Class3, flags); 
    } 
    @Override 
    public int describeContents() { return 0;} 
    public static final Parcelable.Creator<Class2> CREATOR 
    = new Parcelable.Creator<Class2>() { 
     public Class2 createFromParcel(Parcel in) { 
      return new Class2(in); 
     } 
     public Class2[] newArray(int size) { 
      return new Class2[size]; 
     } 
    }; 
} 

第三類:

public class Class3 extends Class4 implements Cloneable, Serializable { 
    private static final long serialVersionUID = 8712386538880552241L; 
    private int count; 
    public Class3(Class4 Class4, int count) { 
     super(Class4.getId(), Class4.getName()); 
     this.count = count; 
    } 
    private Class3(Parcel in) { 
     super(in); 
     this.count = in.readInt(); 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     super.writeToParcel(dest, flags); 
     dest.writeInt(count); 
    } 
    @Override 
    public int describeContents() { return 0;} 
    public static final Parcelable.Creator<Class3> CREATOR 
    = new Parcelable.Creator<Class3>() { 
     public Class3 createFromParcel(Parcel in) { 
      return new Class3(in); 
     } 
     public Class3[] newArray(int size) { 
      return new Class3[size]; 
     } 
    }; 
} 

類第四:

public class Class4 implements Parcelable, Serializable { 
    private static final long serialVersionUID = -8394588748958519736L; 
    private long id; 
    private String name; 
     public Class4(long id, String name) { 
     this.id = id; 
     this.name = name; 
    } 
    public Class4(Parcel in) { 
     this.id = in.readLong(); 
     this.name = in.readString(); 
    } 
    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeLong(id); 
     dest.writeString(name); 
    } 
    @Override 
    public int describeContents() { return 0;} 
    public static final Parcelable.Creator<Class4> CREATOR 
    = new Parcelable.Creator<Class4>() { 
     public Class4 createFromParcel(Parcel in) { 
      return new Class4(in); 
     } 
     public Class4[] newArray(int size) { 
      return new Class4[size]; 
     } 
    }; 
} 

我在所有類中使用的序列化的交流(讀/寫對象)經由插槽信道的數據。

第一項活動:

Class1 class1 = ...; 
Intent secondActivity = new Intent(FirstActivity.this, SecondActivity.class); 
orderedProductsActivity.putExtra("mydata", (Parcelable)class1); 
startActivity(secondActivity); 

次活動:

Class1 class1 = (Class1) getIntent().getParcelableExtra("mydata"); 
+0

這可能有助於你http://stackoverflow.com/questions/1996294/problem-unmarshalling-parcelables?rq=1 –

+0

感謝@ kalyanpvs我看到這個答案,但不幫助 –

+0

好吧..爲什麼你讓你的類擴展parcelable和serializable? –

回答

0

我有這個問題

我從我的第一個活動,第二個活動如下方式傳遞數據過去,在我的情況下它與ArrayList有關,你可以試試:

array = (ArrayList<Long>) in.readSerializable(); 

dest.writeSerializable(array); 

,而不是使用writeParcelableArray

+0

如果我用這個代碼出現 「產生的原因:。顯示java.lang.NullPointerException java.io.ByteArrayInputStream中(ByteArrayInputStream.java:60) android.os.Parcel.readSerializable(Parcel.java:2210)」 錯誤 –

+0

如果我只使用可序列化,並刪除我的類中的所有可執行實現,所有問題消失 –

+0

檢查您的class4,您向parcel寫入2個字段,但您讀取7,所以它會崩潰。只是爲了測試,你可以使用一些其他類,如字符串,整數或長作爲你的數組列表的內容來檢查它是否工作? –