安卓运行时错误:包裹:无法封送值

2022-08-31 08:20:26

我正在尝试使用 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添加到意图中存在问题,并且基于错误,我相信我的Liquoly类是原因,但我不知道为什么。

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


答案 1

您本身是可序列化的,但该类是可序列化的吗?否则,它不会序列化,并在运行时引发错误。使类实现接口HashMapBottleBottlejava.io.Serializable


答案 2

我收到此错误,因为我的类不是.为了使我的类可序列化,我不得不在类的末尾添加以使可序列化。就像这样Serializable: Serializable

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

确保像这样导入Serializable

import java.io.Serializable

推荐