Null接收Parcelable

时间:2012-06-26 10:42:46

标签: android parcelable

  

可能重复:
  Can't pass an ArrayList<Parcelable> to an activity

我昨天开始工作,我在Code中进行了一些重组,现在有些东西不能用了。看了一会儿,我找不到问题了。

我将Parcelables的ArrayList传递给一个活动:

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();

//...

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putParcelableArrayListExtra(Constants.FOO, myArrayListOfParcelables);
startActivity(intent);

接收器:

ArrayList<Parcelable> parcelableList = (ArrayList<Parcelable>)getIntent().getParcelableArrayListExtra(Constants.FOO);

parcelableList总是为null,虽然我发送了一个。

MyParcelable当然扩展了Parcelable。我已经测试过使用putExtra传递MyParcelable的一个对象,它始终有效:

Parcelable p = (Parcelable)getIntent().getExtras().getParcelable(Constants.BAR);

MyParcelable p = (MyParcelable)getIntent().getExtras().getParcelable(Constants.BAR);

我在MyParcelable的代码中放了一些调试消息,我看到在传递列表时只执行了写入方法,但它从未开始读取,甚至不执行createFromParcel。这是什么?

1 个答案:

答案 0 :(得分:0)

我假设你有一个创作者,如果没有,请创建一个。然后我会这样尝试:

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();

//...

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putIntExtra(Constants.FOO_COUNT, myArrayListOfParcelables.size());
MyParcelable p;
for (int i = 0; i < myArrayListOfParcelables.size(); i++){
    p = myArrayListOfParcelables.get(i);
    intent.putParcelableExtra(Constants.FOO + "_" + i, p);
}
startActivity(intent);

然后再读一遍:

Intent intent = getIntent();
int cnt = intent.getIntExtra(Constants.FOO_COUNT);
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(cnt);
MyParcelable p;
for (int i = 0; i < cnt; i++){
    p = (MyParcelable)intent.getParcelableExtra(Constants.FOO + "_" + i);
    myArrayListOfParcelables.add(p);
}

通过这种方式,您可以看到更好的内容。可能是您的Parcelables数组太大而无法获得Parceled。我尝试过一次Bitmap并遇到类似的问题。