概述
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;
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];
}
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数据传递的全部内容,希望文章能够帮你解决Intent数据传递所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复