【问题标题】:AndroidRuntime error: Parcel: unable to marshal valueAndroidRuntime 错误:包裹:无法编组值
【发布时间】:2011-04-18 15:20:07
【问题描述】:

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

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

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我必须将实现 Serializable 添加到 Liquor 和 Bottle 类。
    • 它有效.. 我必须在 Bottle 类中实现 Serializable。谢谢@naikus
    • 酒总是罪魁祸首:))
    • 它有效,但我很困惑序列化与此有什么关系? Android 是否会继续定期序列化和反序列化对象?在什么情况下我需要实现 Serializable 接口(比如这里)?
    • 无论如何都不能怪酒
    【解决方案2】:

    我收到此错误是因为我的班级不是 Serializable。为了使我的类可序列化,我必须在类的末尾添加: Serializable 以使其成为可序列化的。就这样

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

    确保像这样导入Serializable

    import java.io.Serializable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多