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