在 Android 中将 Parcelables 数组写入 Parcel
-
19-09-2019 - |
题
我正在尝试编写一个实现的对象数组 可分包 变成一个 包裹 使用 写可解析数组.
我试图编写的对象定义(如您所期望的)为:
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)不适用于参数(arrival [],int)。推断的类型到达不是有效的限制参数<t扩展包裹>的有效替代品
我完全不明白这个错误信息。 Parcelable
是一个接口(不是类),因此您无法扩展它。有人有主意吗?
更新: 我在放置时遇到了基本相同的问题 ArrayList
的 Parcelable
变成一个 Intent
:
Intent i = new Intent();
i.putParcelableArrayListExtra("locations", (ArrayList<Location>) locations);
产量:
方法 putParcelableArrayListExtra(String, ArrayList< ?类型 Intent 中的 extends Parcelable >) 不适用于参数 (String, ArrayList< Location >)
这可能是因为 Location
是我在上面工作的课程(包含 Arrival
s),但我不这么认为。
解决方案 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);
}
其他提示
实际上,您可以扩展一个接口,而且看起来您需要这样做。writeParcelableArray 中的泛型参数要求扩展接口(而不是接口本身)。尝试创建一个 MyParcelable 扩展 Parcelable 接口。然后使用接口声明您的数组,但 impl 应该是您的 Arrival extends MyParcelable。
我知道问题已经解决,但我的解决方案是其他的,所以我将其发布在这里:在我的例子中,由于类名模糊(一些 dom.Comment 而不是我的 Comment 类),Eclipse 自动导入了错误的包。