Android使用原始和Parcelable传递Bundle

时间:2014-08-10 22:18:38

标签: android

我不明白为什么我不能Bundle同一Bundle中的Parcelable对象和基元。见下文。

Bundle bundle = new Bundle();
bundle.putInt("num", 4); // I like 4.
bundle.putParcelable("myObject", myObject);
Intent localIntent = new Intent(SendingClass.this, ReceivingClass.class);
localIntent.putExtras(bundle);
startActivity(localIntent);

我的ReceivingClass'onCreate(Bundle savedInstanceState),(我知道这里的sIS为空)...

Bundle bundle = getIntent().getExtras();
int num = bundle.getInt("num");
MyObject myObject = (MyObject) bundle.getParcelable("myObject");

我原本期望num和myObject都包含一些内容,但是myObject已填充,但num始终为0.

如果删除putParcelable和getParcelable行,则会正确填充“num”(使用4)。

查看该包,它似乎只填充Parcelable对象(如果有),并“删除”所有其他基元。为什么是这样?我无法找到文件说捆绑包不能包含原语和Parcelables,是什么给出的?

P.S。我试图首先将Bundle添加到Parcelable,然后添加{{1}},但无论如何都不添加骰子。

1 个答案:

答案 0 :(得分:1)

正如预期的那样,这是由于Parcelable课程中的错误。

如果你的public void writeToParcel(Parcel paramParcel, int paramInt){方法为" make Parcel'中的对象写了太多东西。方法public ParcelableClass(Parcel paramParcel) {,您的日志中会出现奇怪的错误,这就是造成问题的原因。

确保读取和写入方法具有相同数量的读取/写入以及正确的数据类型。

在我的情况下,我写了4个对象,(2个Parcelable,2个基元),但只读取2个Parcelables和1个基元。一些物体通过确定似乎很奇怪。