2011-05-11 3 views
6

인 텐트/번들에 함께 들어있는 일부 파생물 객체가 자신을 간섭하고 인 텐트/번들 읽기를 손상시킬 수 있습니까?인 텐트/번들에 함께있는 일부 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 ArrayList에있는) 다른 복잡한 parcelable 객체를 추가하는 경우 : 이 코드는 작동

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

좀 더 10000000 개 arraylist1 요소 (또는 다른 문제를 이해할 수를 가진 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()); 
    } 
012 3,516,

나는 ArrayList를 확장하고 Parcelable를 구현하는 객체를 만들려고하지만 난 android.os.BadParcelableException로 (일부 다른 문제가 : ClassNotFoundException가 비 정렬 화하는 경우 :

을이 자신을 방해 반대하는 경우, 그래서 나는 몇 가지 번들을 사용해야합니다 이 다른 물건들을 같은 의도로 넣으시겠습니까?

답변

7

언젠가는 같은 문제가 있다고 생각합니다. 필자가 기억할 수있는 한, 필자는 다른 유형의 필체를 항상 쓰고 읽음으로써 그것을 고쳤다. 뭔가 같이 :

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

+0

많은 감사 (이 코드를하지만 시도하지 않은), 내 문제를 해결! (그것은 문제가됩니까?) – mtparet