AndroidRuntime 错误: Parcel: 无法封送值

我正在尝试使用 intent.puUltra 函数将 HashMap 传递给一个新活动。逐步通过调试器,似乎添加 HashMap 没有问题,但是当 startActivity ()被调用时,我得到一个运行时错误,指出 Parcel: 无法封送值 com.appName。酒。

Wine 是我创建的一个自定义类,我认为它与 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 时存在问题,并且基于这个错误,我相信原因是我的 Wine 类,但是我不知道为什么。

非常感谢你的帮助,谢谢!

111520 次浏览

您的 HashMap本身是可序列化的,但是 Bottle类是可序列化的吗?否则,它将不会序列化,并在运行时抛出错误。 让 Bottle类实现 java.io.Serializable接口

我得到这个错误是因为我的类不是 Serializable。为了使我的类可序列化,我必须在类的末尾添加 : Serializable,使之成为可序列化的。就像这样

class Shirt(val price: Double, val discountedPrice: Double) : Serializable

确保像这样导入 Serializable

import java.io.Serializable