【发布时间】:2012-09-06 13:10:56
【问题描述】:
我观察到的 w.r.t 将可序列化数据作为额外意图传递的行为非常奇怪,我只是想澄清一下是否有一些我没有错过的东西。
所以我想做的是在ActivtyA 中我将LinkedList 实例放入我为开始下一个活动创建的intent - ActivityB。
LinkedList<Item> items = (some operation);
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra(AppConstants.KEY_ITEMS, items);
在ActivityB 的onCreate 中,我尝试检索LinkedList 额外内容,如下所示 -
LinkedList<Item> items = (LinkedList<Item>) getIntent()
.getSerializableExtra(AppConstants.KEY_ITEMS);
在运行此程序时,我在ActivityB 中反复得到ClassCastException,在上面的行中。基本上,异常说我收到了ArrayList。一旦我将上面的代码更改为接收ArrayList,一切正常。
现在我不能只从现有文档中弄清楚这是否是 Android 在传递可序列化列表实现时的预期行为。或者,我正在做的事情根本上是错误的。
谢谢。
【问题讨论】:
-
但是
LinkedList发生这种行为有什么特别的原因吗,而如果我在intent上添加一个ArrayList实例作为额外数据,一切都会好起来的。而且,我不需要使用Parcelable? -
+1 有趣的问题。我花了一些时间思考这个问题,并且很感兴趣,所以我自己去想办法。现在你和我都更聪明了(见我的回答)。
-
@anirvan 你不能以你的方式传递
ArrayList<CustomObject>。只允许 ArrayList 的原始类型为String或Integer -
@LalitPoptani 你错了。只要
CustomObject实现Serializable就没有错。而且效果很好。 -
@anirvan 是的,你是对的,但你必须实现
Serializable,否则我将无法实现。