在Intent / bundle中放在一起的一些parcelables对象可能会干扰自己并破坏对Intent / Bundle的读取?

时间:2011-05-11 10:15:26

标签: java android bundle android-intent parcelable

在Intent / bundle中放在一起的一些parcelables对象可能会干扰自己并破坏Intent / Bundle的读取?

我提取代码,我认为存在问题。 此代码有效:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(object1, arg1);
    arg0.writeTypedList(arraylist1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);
   }

但是如果我添加一个其他复杂的parcelable对象(带有intern parcelable ArrayList):

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(object1, arg1);
    arg0.writeParcelable(object2, arg1);
    arg0.writeTypedList(arraylist1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);
   }

我为arraylist1(或其他难以理解的问题)获得了更多10000000元素的boucle

虽然如果我删除带有arraylist1的行,它可以工作:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeParcelable(this.object1, arg1);
    arg0.writeParcelable(this.object2, arg1); 

}

public void readFromParcel(Parcel in) {
    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
   } 

我试图创建一个扩展ArrayList并实现Parcelable的对象,但我还有其他一些问题(如解组时android.os.BadParcelableException:ClassNotFoundException)。

如果这些物体干扰了自己,那么我必须使用几个束将这些不同的物体放入同一个意图中?

1 个答案:

答案 0 :(得分:7)

我想有一天我遇到了同样的问题。据我所知,我通过在所有其他类型之后写入/读取Parcelable来修复它。类似的东西:

public void writeToParcel(Parcel arg0, int arg1) {
    arg0.writeTypedList(arraylist1); 

    arg0.writeParcelable(object1, arg1);
    arg0.writeParcelable(object2, arg1);
}

public void readFromParcel(Parcel in) {
    arraylist1 = new ArrayList<object3>();
    in.readTypedList(arraylist1, object3.CREATOR);

    object1  = in.readParcelable(object1.class.getClassLoader());
    object2 = in.readParcelable(object2.class.getClassLoader());
}

(虽然没试过这个代码)