Intent数据传递
来源:互联网 发布:淘宝 订单 清洗 编辑:程序博客网 时间:2024/04/29 20:39
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进行数据持久化
0 0
- Android - Intent - 传递数据
- Intent传递数据
- intent数据传递问题
- Intent传递的数据
- Intent 数据传递
- Intent传递数据
- Android - Intent - 传递数据
- Intent 传递数据
- Intent数据传递
- Intent数据传递
- Intent数据传递
- intent 传递 数据
- Intent的数据传递
- Intent传递集合数据
- Intent数据传递
- Intent数据传递
- Intent数据传递
- Intent-数据传递
- 系统密码修改,SQLServer启动失败
- eclipse 加载xml头文件的xsd
- 为什么要重写hashcode()方法和equals()方法?
- STM32 AM2305高精度温湿度传感器驱动
- Android学习笔记之——GridView
- Intent数据传递
- 虚拟机下linux连不上网
- 变量名的力量(二)
- Inode查看
- 在Ubuntu系统上轻松安装软件的方法和技巧
- 什么是集群
- delphi引用类的顺序
- java线程学习(五)—java内存模型自己总结
- codeforces_#309_div2_B_554B