android:将Serializable对象置于意图中的问题

时间:2009-10-10 17:07:29

标签: android arraylist android-intent serializable

嗨我有一个类的问题我想通过把它放入putExtras()来传递一个意图 它的可序列化和代码如下所示:

public abstract class ObjectA extends ArrayList<ObjectA> implements java.io.Serializable{...}

public class ObjectB extends ObjectA {...}


...
Bundle extras = new Bundle();
extras.putSerializable("blabla", ObjectB);
intent.putExtras(extras);

...

Object y = getIntent().getExtras().get("blabla");

问题是,y现在是一个ArrayList而不再是ObjectB,所以我不能抛出它.. 如果我将代码更改为

public class ObjectB implements java.io.Serializable {...}

一切正常

4 个答案:

答案 0 :(得分:14)

通过在类中实现java.util.List和java.io.Serializable,您已触发此android bug

答案 1 :(得分:0)

我怀疑发生的事情是因为你没有声明ObjectB是可序列化的,所以它“退回”到最近的父对象。所以当你把它放到Bundle中时,你实际上并没有放入ObjectB,而是将ObjectB强制转换回ArrayList。

我认为你将不得不使用第二个(“工作正常”)代码。

答案 2 :(得分:0)

在将ObjectB传递给捆绑包之前,如何声明它? 根据我对您的问题的理解,当您传入捆绑包时,只有在删除它时才会收到错误。 尝试将ObjectB直接转换为ObjectB类型,如下所示:

ObjectB y = (ObjectB) getIntent().getExtras().get("blabla");

答案 3 :(得分:0)

ObjectA中的ArrayList应实现接口Parcelable。之后,您可以将您的arraylists置于意图中,并将其置于另一项活动中。