2009-12-11 156 views
6

我正在嘗試使用writeParcelableArray將一個實現Parcelable的對象數組寫入Parcel在Android中將包裹數組寫入一個包裹

我想寫的對象定義(如你所期望)爲:

public class Arrival implements Parcelable { 
    /* All the right stuff in here... this class compiles and acts fine. */ 
} 

我試圖把它們寫爲'包裹」有:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Arrival[] a; 
    /* some stuff to populate "a" */ 
    dest.writeParcelableArray(a, 0); 
} 

當Eclipse試圖編譯這個我得到的錯誤:

Bound mismatch: The generic method writeParcelableArray(T[], int) of type Parcel is not applicable for the arguments (Arrival[], int). The inferred type Arrival is not a valid substitute for the bounded parameter < T extends Parcelable >

我完全不明白此錯誤消息。 Parcelable是一個接口(不是類),所以你不能擴展它。有人有主意嗎?

UPDATE:

Intent i = new Intent(); 
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations); 

產量:我的推杆Parcelable秒的ArrayList時爲Intent具有基本相同的問題

The method putParcelableArrayListExtra(String, ArrayList< ? extends Parcelable >) in the type Intent is not applicable for the arguments (String, ArrayList< Location >)

這可能是因爲Location是我上面正在做的課程(包裝Arrival s),但我不這麼認爲。

回答

2

事實證明,它只是想讓我建立一個可接受的數組。要使用從問題的例子:

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    Parcelable[] a; 
    /* 
     some stuff to populate "a" with Arrival 
     objects (which implements Parcelable) 
    */ 
    dest.writeParcelableArray(a, 0); 
} 
+0

正如我所說,使用接口聲明你的數組。很高興你能解決問題。 – harschware 2009-12-12 22:09:06

3

實際上,你可以擴展一個接口,看起來你需要這樣做。 writeParcelableArray中的泛型參數是要求擴展接口(而不是接口本身)。嘗試創建一個接口MyParcelable擴展Parcelable。然後用接口聲明你的數組,但是impl應該是你的Arrival擴展MyParcelable。

0

我知道這個問題解決,但我的解決辦法等,所以我在這裏張貼:在我的情況下,Eclipse將自動導入,因爲類名abiguity錯包(DOM一些評論,而不是我的評論類)。