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;
     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进行数据持久化
0 0
原创粉丝点击