在Android中将Parcelables数组写入Parcel

时间:2009-12-11 21:01:11

标签: java android parcelable parcel

我正在尝试使用Parcelable将实现Parcel的对象数组写入writeParcelableArray

我正在尝试编写的对象(正如您所期望的那样)定义为:

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尝试编译时,我收到错误:

  

绑定不匹配:通用方法   writeParcelableArray(T [],int)的类型   包裹不适用于   arguments(Arrival [],int)。该   推断类型到达不是有效的   替代有界参数   < T扩展了Parcelable>

我完全不明白这个错误信息。 Parcelable是一个接口(不是类),因此您无法扩展它。有人有什么想法吗?

更新:ArrayList Parcelable Intent放入Intent i = new Intent(); i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations); 时,我遇到的问题基本相同:

Location

的产率:

  

Intent类型中的方法putParcelableArrayListExtra(String,ArrayList&lt;?extends Parcelable&gt;)不适用于参数(String,ArrayList&lt; Location&gt;)

这可能是因为Arrival是我上面正在处理的类(包裹{{1}}),但我不这么认为。

3 个答案:

答案 0 :(得分:3)

实际上,您可以扩展界面,看起来您需要这样做。 writeParcelableArray中的泛型参数要求扩展接口(而不是接口本身)。尝试创建一个接口MyParcelable扩展Parcelable。然后使用接口声明你的数组,但impl应该是你的Arrival扩展MyParcelable。

答案 1 :(得分:2)

事实证明它只是想让我构建一个Parcelables数组。要使用问题中的示例:

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

答案 2 :(得分:0)

我知道问题已经解决,但我的解决方案是其他的,所以我在这里发布:在我的情况下,Eclipse自动导入错误的包,因为类名称含糊(有些dom.Comment而不是我的Comment类)。