【转载】Android中Intent传递对象的两种方法(Serializable,Parcelable)! 【转】

顺便提一句:

intent.putExtra(key,value) 其实都是把数据放到一个Bundle中,获取时可以使用getExtras()获取一个Bundle就是put的集合。如果put的时候既put了普通类型的变量,又声明了一个new Bundle,并putExtras(bundle),那么所有的数据都在这个bundle中

Intent intent=new Intent();
intent.putExtra("Key", "testValueNotInBundle");
intent.putExtra("Key2", "testValue2NotInBundle");
Bundle bundle=new Bundle();
bundle.putString("Key", "testValueInBundle");
intent.putExtras(bundle);
String valueNotInBundleString=intent.getStringExtra("Key");
String valueInBundleString=intent.getExtras().getString("Key");
String valueNotInBundle2String=intent.getExtras().getString("Key2");
String text="testValueNotInBundle is: "+valueNotInBundleString;
text+="\r\n";
text+="testValueInBundle is :"+valueInBundleString+"\r\n";
text+="testValue2NotInBundle is :"+valueNotInBundle2String;
textView1.setText(text);

另外,Bundle可以嵌套Bundle,所以别混淆了。

 

Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口

1,先说使用方法:

A)Put:

Intent mIntent = new Intent(this,ObjectTranDemo1.class);  
Bundle mBundle = new Bundle();  
mBundle.putSerializable(SER_KEY,mPerson);  
mIntent.putExtras(mBundle);  

Bundle mBundle = new Bundle();  
mBundle.putParcelable(PAR_KEY, mBook);  
mIntent.putExtras(mBundle); 

intent.putParcelableArrayListExtra("sockets", models);  //直接putParcelable数组

intent.putExtra(key,Object);//直接putExtra数据

B)Get:

Bundle bundle=getIntent().getExtras();再通过Bundle查询数据

Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);

 Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);  //对应

models=getIntent().getParcelableArrayListExtra("sockets");  //对应直接putParcelableArrayListExtra

Person person = (Person)data.getParcelableExtra(key);  //对应直接putExtra

2,继承接口的类的写法:

A)Serializable接口:奇怪,这个接口没有任何方法。

B)Parcelable接口:

public class Person implements Parcelable
{   private String Name = "anupama";
    private String Address = "India";
    private int Age = 30;   
    @Override
    public int describeContents()
    {  return 0;
    }
 
    @Override
    public void writeToParcel(Parcel dest, int flag)
    { dest.writeString(Name);
        dest.writeString(Address);
        dest.writeInt(Age);
    }
    public Person(Parcel in)
    { this.Name = in.readString();
        this.Address = in.readString();
        this.Age = in.readInt();
    }
 
    @SuppressWarnings("unchecked")
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public Person createFromParcel(Parcel in)
        {
            return new Person(in);
        }
 
        public Person[] newArray(int size)
        {
            return new Person[size];
        }
    };
}

 

//==================================================

package com.ql.model;

import android.os.Parcel;
import android.os.Parcelable;

public class Stock implements Parcelable{

    private String field_0;//代码+\n+名称
    private String field_1;//最新+\n+金额
    private String field_2;//涨幅
    private String field_3;//涨跌
    private String field_4;//雷达
    //分时
    private float[] field_5;//走势
    private String field_6;//高点
    private String field_7;//均线
    private String field_8;//低点
    public Stock(){       
    }
    public Stock(String field_0, String field_1, String field_2,  String field_3, String field_4, float[] field_5, String field_6, String field_7, String field_8) {
        super();
        this.field_0 = field_0;
        this.field_1 = field_1;
        this.field_2 = field_2;
        this.field_3 = field_3;
        this.field_4 = field_4;
        this.field_5 = field_5;
        this.field_6 = field_6;
        this.field_7 = field_7;
        this.field_8 = field_8;
    }
    public String getField_6() {
        return field_6;
    }
    public void setField_6(String field_6) {
        this.field_6 = field_6;
    }
    public String getField_7() {
        return field_7;
    }
    public void setField_7(String field_7) {
        this.field_7 = field_7;
    }
    public String getField_8() {
        return field_8;
    }
    public void setField_8(String field_8) {
        this.field_8 = field_8;
    }
    public float[] getField_5() {
        return field_5;
    }
    public void setField_5(float[] field_5) {
        this.field_5 = field_5;
    }
    public String getField_0() {
        return field_0;
    }
    public void setField_0(String field_0) {
        this.field_0 = field_0;
    }
    public String getField_1() {
        return field_1;
    }
    public void setField_1(String field_1) {
        this.field_1 = field_1;
    }
    public String getField_2() {
        return field_2;
    }
    public void setField_2(String field_2) {
        this.field_2 = field_2;
    }
    public String getField_3() {
        return field_3;
    }
    public void setField_3(String field_3) {
        this.field_3 = field_3;
    }
    public String getField_4() {
        return field_4;
    }
    public void setField_4(String field_4) {
        this.field_4 = field_4;
    }
    public static Parcelable.Creator getCreator() {
        return CREATOR;
    }
    @Override
    public int describeContents() {      
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(field_0);  
        dest.writeString(field_1);  
        dest.writeString(field_2);  
        dest.writeString(field_3);  
        dest.writeString(field_4);
        dest.writeFloatArray(field_5);
        dest.writeString(field_6);
        dest.writeString(field_7);
        dest.writeString(field_8);
    }
    public Stock(Parcel in)  
    {  
        this.field_0 = in.readString();  
        this.field_1 = in.readString();  
        this.field_2 = in.readString();
        this.field_3 = in.readString();
        this.field_4 = in.readString();
//        in.readFloatArray(this.field_5);//似乎不行
        this.field_5=in.createFloatArray();//可能不妥,看API
        this.field_6 = in.readString();
        this.field_7 = in.readString();
        this.field_8 = in.readString();
    }  
   
    @SuppressWarnings("unchecked")  
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {  
        public Stock createFromParcel(Parcel in)  
        {  
            return new Stock(in);  
        }  
   
        public Stock[] newArray(int size)  
        {  
            return new Stock[size];  
        }  
    };  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值