【问题标题】:can't pass arraylist through intent.putExtra无法通过intent.putExtra 传递arraylist
【发布时间】:2025-11-29 07:00:02
【问题描述】:

我正在尝试使用 intent.putExtra 将 ArrayList<driver> 传递给新活动,但出现此错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name =com.example.irinab.licenta3.CustomerAccount$driver);

驱动程序是我当前活动中的一个内部类,它已经实现了可序列化,所以我不明白为什么会出现这个错误。 这是驱动类的代码:

private class driver implements Serializable
    {
        private final String name;
        private final boolean available;

        driver(String nume, boolean av)
        {
            this.name = nume;
            this.available = av;
        }
    }

这是意图的代码部分:

Intent startShowListIntent = new Intent(CustomerAccount.this,    ShowList.class);
startShowListIntent.putExtra("id",ID);
startShowListIntent.putExtra("type",type);
startShowListIntent.putExtra("drivers",online_drivers);
startActivity(startShowListIntent);

谁能告诉我我做错了什么?感谢您的帮助!

【问题讨论】:

  • 使用单例类而不是通过意图传递
  • 我相信这不是完全的例外,你能搜索Caused by吗?
  • 我认为在android中最好让你的类实现parcelable而不是serializable,因为与parceling相比,serilization涉及更多的内存流失,然后你可以使用intent.putParcelableArrayList(key , 价值);这是一个很好的实现 parcellable 的教程:wptrafficanalyzer.in/blog/…
  • @Irina 公开您的课程并确保它具有公共构造函数并查看是否有帮助
  • 我认为你也应该为你的班级创建 getter 和 setter

标签: android android-activity arraylist


【解决方案1】:

Android Intent 不支持传递可序列化的数组列表。您应该实现 parcelable,因为支持 parcelable 数组列表。

【讨论】:

    【解决方案2】:

    这是你的 MainActivity

    ArrayList<Model> arrmodel = new ArrayList<Model>();
                    Model m = new Model();
                    Model n = new Model();
                    arrmodel.add(m);
                    arrmodel.add(n);
    
                    Bundle b = new Bundle();
                    for(int i = 0;i<arrmodel.size();i++){
                    b.putSerializable("ss"+i, arrmodel.get(i));
                    }
                    b.putInt("size", arrmodel.size());
                    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                    intent.putExtra("bundle", b);
                    startActivity(intent);
    

    这是你的 SecondActivity

     Bundle value=getIntent().getExtras().getBundle("bundle");
            ArrayList<Model> arrmodelArrayList = new ArrayList<Model>();
            for(int i = 0;i<value.getInt("size");i++){
                arrmodelArrayList.add((Model) value.getSerializable("ss"+i));
            }
    

    但不鼓励

    【讨论】: