Intent数据传递
2015-09-16 21:01
531 查看
1、用intent传递基本数据类型的数据
intent 可以保存的基本类型包括:String,int,boolean,byte,char,float,包括及其基本类型的数组
Intent intent = new Intent(this,NextActivity.class);
intent.putExtra(key,data);
startActivity(intent);
接收方:
Intent intent = getIntent();
String value = intent.getStringExtra(key);
获取的值的时候更具存入的数据类型选择getXXXExtra(key)方法
2、用Bundle和Intent传递数据
Intent intent = new Intent();
intent.setClass(this,NextActivity.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
intent.putExtras(bundle);
startActivity(intent);
接收方:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String str = bundle.getString(key);
根据不同的数据类型选择不同的getXXX方法
3、传递对象
使用intent来传递对象通常有两种实现方式,Serilizable和Parcelable。
1)使用Serilizabl,要进行传输的对象实现Serilizable接口,没有需要重写的方法,是一个序列化的标记。
例如:class Person implements Serilizable{
private String name;
private int age;
//其他代码略
}
传入数据:
Person p = new Person();
Intent intent = new Intent(this,NextActivity.class);
intent.putExtra("person",p);
接收方:
Intent intent = getIntent();
Person person = (Person)intent.getSerializableExtra("person");
2)使用Parcelable
package com.trkj11.intent_01;
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
private String name;
private String sex;
private int age;
//get方法省略
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(sex);
dest.writeInt(age);
}
public static final Parcelable.Creator<Person> CREATOR =
new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.name = source.readString();
person.sex = source.readString();
person.age = source.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
需要注意的是,在这里读取的顺序一定要和写的顺序一致
对象存入是和Serilizable序列化的对象是一样的,只是在接收方使用不同的方法。getIntent().getParcelableExtra(key);
4、Serilizable和Parcelable的比较分析
Serilizable:
1)表示对象序列化,将对对象转换成课存储或者可传输的状态,只需要类去实现这个接口即可
2) Serializable序列化不保存静态变量,可以使用Transient关键字对部分字段不进行序列化,也可以覆盖writeObject、readObject方法以实现序列化过程自定义
Parcelable:
1)这种方式是将一个完整的对象进行分解,分解后的每一个部分都是Intent所支持的数据类型
2)Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
intent 可以保存的基本类型包括:String,int,boolean,byte,char,float,包括及其基本类型的数组
Intent intent = new Intent(this,NextActivity.class);
intent.putExtra(key,data);
startActivity(intent);
接收方:
Intent intent = getIntent();
String value = intent.getStringExtra(key);
获取的值的时候更具存入的数据类型选择getXXXExtra(key)方法
2、用Bundle和Intent传递数据
Intent intent = new Intent();
intent.setClass(this,NextActivity.class);
Bundle bundle = new Bundle();
bundle.putString(key,value);
intent.putExtras(bundle);
startActivity(intent);
接收方:
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String str = bundle.getString(key);
根据不同的数据类型选择不同的getXXX方法
3、传递对象
使用intent来传递对象通常有两种实现方式,Serilizable和Parcelable。
1)使用Serilizabl,要进行传输的对象实现Serilizable接口,没有需要重写的方法,是一个序列化的标记。
例如:class Person implements Serilizable{
private String name;
private int age;
//其他代码略
}
传入数据:
Person p = new Person();
Intent intent = new Intent(this,NextActivity.class);
intent.putExtra("person",p);
接收方:
Intent intent = getIntent();
Person person = (Person)intent.getSerializableExtra("person");
2)使用Parcelable
package com.trkj11.intent_01;
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
private String name;
private String sex;
private int age;
//get方法省略
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(sex);
dest.writeInt(age);
}
public static final Parcelable.Creator<Person> CREATOR =
new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.name = source.readString();
person.sex = source.readString();
person.age = source.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
需要注意的是,在这里读取的顺序一定要和写的顺序一致
对象存入是和Serilizable序列化的对象是一样的,只是在接收方使用不同的方法。getIntent().getParcelableExtra(key);
4、Serilizable和Parcelable的比较分析
Serilizable:
1)表示对象序列化,将对对象转换成课存储或者可传输的状态,只需要类去实现这个接口即可
2) Serializable序列化不保存静态变量,可以使用Transient关键字对部分字段不进行序列化,也可以覆盖writeObject、readObject方法以实现序列化过程自定义
Parcelable:
1)这种方式是将一个完整的对象进行分解,分解后的每一个部分都是Intent所支持的数据类型
2)Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories