AndroidRuntime错误:包裹:无法封送值


108

我正在尝试使用intent.puExtra函数将HashMap传递给新活动。逐步调试器似乎没有添加HashMap,但是,当调用startActivty()时,出现运行时错误,指出Parcel:无法封送com.appName.Liquor值。

Liquor是我创建的一个自定义类,我相信它与HashMap结合使用会导致此问题。如果我传递一个字符串而不是我的HashMap,它将加载下一个活动。

主要活动

lv.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {

      String cat = ((TextView) view).getText().toString();
      Intent i = new Intent(OhioLiquor.this, Category.class);
      i.putExtra("com.appName.cat", _liquorBase.GetMap());
      startActivity(i);

酒类

public class Liquor
{
public String name;
public int code;
public String category;

private HashMap<String, Bottle> _bottles;

public Liquor()
{
    _bottles = new HashMap<String, Bottle>();
}

public void AddBottle(Bottle aBottle)
{
    _bottles.put(aBottle.size, aBottle);
}
}

子活动

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    HashMap<Integer, Liquor> map = (HashMap<Integer, Liquor>)getIntent().getSerializableExtra("com.appName.cat");

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, GetNames(map)));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

如果存在运行时错误,则永远不会使其进入子活动类。因此,我很确定问题在于将HashMap添加到Intent中,并且基于该错误,我相信我的Liquor类是原因,但我不知道为什么。

您的帮助将不胜感激。谢谢!

Answers:


274

HashMap本身是可序列化的,但Bottle类可序列化吗?如果没有,它将不会序列化,并且会在运行时引发错误。使Bottle类实现java.io.Serializable接口


5
谢谢,我不得不将实现Serializable的实现添加到Liquor和Bottle类中。
杰瑞德(Jared)2010年

2
它的工作原理。我必须在Bottle类中实现Serializable。感谢@naikus
Ashokchakravarthi Nagarajan

177
酒永远是罪魁祸首:))
Cezar Alexandru Vancea 2014年

3
为我工作:)
Jacky

1
它可以工作,但是我很困惑序列化与此有关?Android是否继续定期对对象进行序列化和反序列化?在什么情况下我需要实现Serializable接口(如此处)?
Reeshabh Ranjan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.