Android Activity之间传递对象及对象数组
2015-10-26 23:19
405 查看
假设对象为People类,包含信息姓名和年龄:
publicclass People{
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
}
方法一:Serializable
必须条件:类实现了Serializable接口
publicclass People implementsSerializable{
privatestatic final long serialVersionUID = 1L;
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
}
传递对象:
传递端:
People people = newPeople("John",21);
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putSerializable("people", people);
intent.putExtras(bundle);
startActivity(intent);
接收端:
People people = (People) this.getIntent().getSerializableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<people> people = newArrayList<people>();
people.add(newPeople("John",21));
people.add(newPeople("Amy",20));
Bundle bundle = newBundle();
bundle.putSerializable("people", (Serializable) people);
Intent intent = newIntent(SendActivity.this, RcvActivity.class);
intent.putExtras(bundle);
startActivity(intent);
接收端:
List<people> resultList = (List<people>) this.getIntent().getSerializableExtra("people");
String strData = "";
for(People p : resultList) {
strData = strData + p.strName + " " + p.iAge + "\n";
}
Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
</people></people>
方法二:Parcelable
必须条件:类实现了Parcelable接口
publicclass People implementsParcelable {
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
@Override
publicint describeContents() {
// TODO Auto-generated method stub
return0;
}
@Override
publicvoid writeToParcel(Parcel parcel, intarg1) {
// TODO Auto-generated method stub
parcel.writeString(strName);
parcel.writeInt(iAge);
}
publicstatic final Parcelable.Creator<people> CREATOR = newCreator<people>() {
publicPeople createFromParcel(Parcel source) {
People pTemp = newPeople("",0);
pTemp.strName = source.readString();
pTemp.iAge = source.readInt();
returnpTemp;
}
publicPeople[] newArray(intsize) {
returnnew People[size];
}
};
}
传递对象:
传递端:
People people = newPeople("John",21);
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putParcelable("people", people);
intent.putExtras(bundle);
startActivity(intent);
接收端:
People people = (People) this.getIntent().getParcelableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<people> People = newArrayList<people>();
People.add(newPeople("John",21));
People.add(newPeople("Amy",20));
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putParcelableArrayList("People", (ArrayList<!--? extendsParcelable-->) People);
intent.putExtras(bundle);
startActivity(intent);
</people></people>
接收端:
List<people> resultList = this.getIntent().getExtras()
.getParcelableArrayList("People");
String strData = "";
for(People p : resultList) {
strData = strData + p.strName + " " + p.iAge + "\n";
}
Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
</people>
可以发现在Parcelable中需实现public int describeContents()、 publicvoid writeToParcel(Parcel parcel, int arg1),还需要在添加一个静态成员变量CREATOR:public static final Parcelable.Creator CREATOR。
区别(by: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html)
1.Serializable的实现,只需要implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
2.Parcelabel的实现,不仅需要implements Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。
3.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。4.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
5.Parcelable不能使用在要将数据存储在磁盘上的情况,因为在外界有变化的情况下Parcelable不能很好的保证数据的持续性。
publicclass People{
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
}
方法一:Serializable
必须条件:类实现了Serializable接口
publicclass People implementsSerializable{
privatestatic final long serialVersionUID = 1L;
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
}
传递对象:
传递端:
People people = newPeople("John",21);
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putSerializable("people", people);
intent.putExtras(bundle);
startActivity(intent);
接收端:
People people = (People) this.getIntent().getSerializableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<people> people = newArrayList<people>();
people.add(newPeople("John",21));
people.add(newPeople("Amy",20));
Bundle bundle = newBundle();
bundle.putSerializable("people", (Serializable) people);
Intent intent = newIntent(SendActivity.this, RcvActivity.class);
intent.putExtras(bundle);
startActivity(intent);
接收端:
List<people> resultList = (List<people>) this.getIntent().getSerializableExtra("people");
String strData = "";
for(People p : resultList) {
strData = strData + p.strName + " " + p.iAge + "\n";
}
Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
</people></people>
方法二:Parcelable
必须条件:类实现了Parcelable接口
publicclass People implementsParcelable {
publicString strName;
publicint iAge;
publicPeople(String strName,intiAge){
this.strName = strName;
this.iAge = iAge;
}
publicString getName(){
returnstrName;
}
publicint getAge(){
returniAge;
}
@Override
publicint describeContents() {
// TODO Auto-generated method stub
return0;
}
@Override
publicvoid writeToParcel(Parcel parcel, intarg1) {
// TODO Auto-generated method stub
parcel.writeString(strName);
parcel.writeInt(iAge);
}
publicstatic final Parcelable.Creator<people> CREATOR = newCreator<people>() {
publicPeople createFromParcel(Parcel source) {
People pTemp = newPeople("",0);
pTemp.strName = source.readString();
pTemp.iAge = source.readInt();
returnpTemp;
}
publicPeople[] newArray(intsize) {
returnnew People[size];
}
};
}
传递对象:
传递端:
People people = newPeople("John",21);
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putParcelable("people", people);
intent.putExtras(bundle);
startActivity(intent);
接收端:
People people = (People) this.getIntent().getParcelableExtra("people");
String strData = people.getName() + " " + people.getAge();
Toast.makeText(getApplication(),strData, Toast.LENGTH_SHORT).show();
传递对象数组:
传递端:
List<people> People = newArrayList<people>();
People.add(newPeople("John",21));
People.add(newPeople("Amy",20));
Intent intent = newIntent(SendActivity.this,RcvActivity.class);
Bundle bundle = newBundle();
bundle.putParcelableArrayList("People", (ArrayList<!--? extendsParcelable-->) People);
intent.putExtras(bundle);
startActivity(intent);
</people></people>
接收端:
List<people> resultList = this.getIntent().getExtras()
.getParcelableArrayList("People");
String strData = "";
for(People p : resultList) {
strData = strData + p.strName + " " + p.iAge + "\n";
}
Toast.makeText(getApplication(), strData, Toast.LENGTH_SHORT).show();
</people>
可以发现在Parcelable中需实现public int describeContents()、 publicvoid writeToParcel(Parcel parcel, int arg1),还需要在添加一个静态成员变量CREATOR:public static final Parcelable.Creator CREATOR。
区别(by: http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html)
1.Serializable的实现,只需要implements Serializable即可。这只是给对象打了一个标记,系统会自动将其序列化。
2.Parcelabel的实现,不仅需要implements Parcelabel,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口。
3.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。4.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
5.Parcelable不能使用在要将数据存储在磁盘上的情况,因为在外界有变化的情况下Parcelable不能很好的保证数据的持续性。
相关文章推荐
- android群英传读书笔记---自定义ViewGroup
- Android中内容观察者的使用---- ContentObserver类详解
- android-----(Content Provider 内容提供者组件)
- 即时聊天IM之四 Android客户端IM帮助类编写
- FFmpeg Android平台编译与使用
- Android编程宝典-第二章-Activity
- Android Fragment 真正的完全解析
- Android_10_java调用C(借助NDK工具自动生成.so)
- androidGMS认证之Camera support cross profile image capture
- Android SurfaceFlinger and its' client
- Android权限声明
- 安卓第一次实验解析
- Android中Bitmap,byte[],Drawable,InputStream相互转化工具类
- Android ffmpeg+librtmp+speex交叉编译
- Android_10_javah命令
- Android控件之RadioGroup、RadioButton
- 我的Android进阶之旅------>android中service的onStartCommand()方法中intent为null的问题
- android消息推送
- Android上面通过URL来启动本地应用
- android studio使用发布者证书调试