无法使用parcel发送未知数据类型的Object

时间:2011-01-10 09:22:10

标签: java android parcelable

我前几天问了一个关于使用意图作为包裹将活动发送到活动的问题,但我不确定如何在我的情况下这样做。我有一个类型为对象Object x;的变量,它的设置类似于:x = edit.getText().toString();,在这个例子中,x成为一个String对象,但我也可以将x设置为整数和SQLDate类型。查看如何将对象作为parcel发送的示例在我看来,即使对于自定义数据类型,您也必须知道数据类型是什么。任何对此的帮助将非常感激,因为我完全坚持这一点。

流程是:

Object x; - 已创建。

x = String object||Integer object||sqldate object - 为x分配值

i.putExtra("object", x); - x被分配后发送到下一个活动。

2 个答案:

答案 0 :(得分:2)

您传递的数据的要求是它可以以某种方式序列化,是的,StringInteger都是。此外,如果您使用的是java.sql.Date,则此类型会继承util.Date,而Serializable会继承{{3}}。轻微的“问题”是Intent.putExtra没有以Object作为参数类型的重载。因此,您必须“知道”要放置的数据类型:

if (goingToUseStringObject...)
{
    // use the CharSequence overload
    i.putExtra("object", stringObject);
}
else if (goingToUseIntegerObject...)
{
    // use the int overload
    i.putExtra("object", integerObject);
}
else if (goingToUseDateObject...)
{
    // use the Serializable overload
    i.putExtra("object", dateObject);
}

答案 1 :(得分:1)

我建议创建一个实现Object的包装类,而不是让Parcelable引用可以是其他3种不同的数据类型之一,它会为您存储数据。如果您经常传递这些数据,它将使您的生活更加简单。