传递一系列自定义对象+ Android

时间:2011-03-28 14:10:49

标签: android

我对Android开发很新,面对一个小问题。 我有一类动物。我需要在两个活动之间传递一个Animal类数组。我搜索了论坛,发现这可以用Parceable完成,但我无法完全理解它。我尝试使用Serializable但有一个例外。 请指导我如何做到这一点?

3 个答案:

答案 0 :(得分:6)

投入:

ArrayList<Animal> animals = new ArrayList<Animal>();
//fill your list with animals here

intent.putExtra("animals", animals);

检索:

ArrayList<Animal> animals = (ArrayList<Animal>) getIntent()
                        .getSerializableExtra("animals");

您的班级Animal应该实施Serializable

修改 请注意,这种方法易于实施,但效率低下。序列化和反序列化对象需要花费时间,并且如果阵列大小(例如,100多个对象,或10个复杂的重物),则可能导致活动转换的明显延迟。因此,请将此方法视为临时方法,不要在生产代码中使用它。

为了提高效率,您可以按照David Caunt的建议使用Parcelable。这是一个易于使用的代码生成器,可避免开发人员编写样板代码:Parcelabler

一个好的替代方法是在从需要它的每个Activity中的本地数据库获取和检索数据时,将数据存储在本地SQLite DB中。因此,您只会通过意图传递内容网址。

答案 1 :(得分:2)

你应该implement Parcelable然后你可以传递你的对象。您基本上添加了几种方法将对象转换为Parcel,反之亦然。

Parcelling类似于序列化但不一样。把它想象成重建对象。

有一个例子正是你正在尝试的here

答案 2 :(得分:0)

您的类Animal应该实现Serializable。

放数据

   ArrayList<Animal> animals = new ArrayList<Animal>();

            Intent intent = new Intent(MainActivity.this,
                    AnimalListActivity.class);

            Bundle bundleObject = new Bundle();
            bundleObject.putSerializable("animal", animals);

            intent.putExtras(bundleObject);

            startActivity(intent);

获取数据

 ArrayList<Animal> animals = new ArrayList<Animal>();
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.animal_activity);

    Bundle bundleObject = getIntent().getExtras();
    animals = (ArrayList<Animal>) bundleObject
            .getSerializable("animal");


    }
 }