使用Bundle传递基本类型数据和对象(Serializable 和 Parceable 传递对象)

1. Android中Bundle类的作用?


Bundle用于携带数据,类似于 Map集合,用来存放Key-Value键值对,但是它相对于Map,提供了常用类型的 putXxx()和getXxx()方法,比如putString()/getString()、putInt()/getInt(),putXxx()用于往Bundle中放入对象,getXxx()用于从Bundle中取出数据。

2. Bundle可以传递的数据类型


1>:基本类型的数据,如int、String、Float等等;
两个Activity传递:比如从MainActivity传递String类型数据到SecondActivity,代码如下:

MainActivity代码如下:

    public void click(View view){
        Intent intent = new Intent(MainActivity.this , SecondActivity.class) ;
        Bundle bundle = new Bundle() ;
        bundle.putString("data" , "Novate");
        intent.putExtra("bundle" , bundle) ;
        startActivity(intent);
    }

SecondActivity代码如下:

        TextView tv_text = (TextView) findViewById(R.id.tv_text);
        Bundle bundle = getIntent().getBundleExtra("bundle") ;
        String text = bundle.getString("data") ;
        tv_text.setText(text);

2>:在两个Activity中传递对象,分别是Serializable(Java中的)和Parceable(Android中的),使用bundle.putSerializable(Key,Value),bundle.putParceable(Key,Value),但是前提必须要让 JavaBean实体类实现 这两个接口,否则没有作用;

3. 使用Serializable 和 Parceable 传递对象


3.1 Serializable传递对象具体实现

1>: 首先写一个Person,它是一个JavaBean对象,必须实现Serializable接口,然后写一个 serialVersionUID序列Id;
2>:然后定义一个serializableMethod()方法,作用是使用 Serializable传递对象;

    /**
     *   Serializable传递对象的方法
     */
    private void serializableMethod() {
        Person mPerson = new Person() ;
        mPerson.setName("JackChen");
        mPerson.setAge(26);

        Intent intent = new Intent(this , SerializableActivity.class) ;
        Bundle bundle = new Bundle() ;
        bundle.putSerializable(SER_KEY , mPerson);
        intent.putExtras(bundle) ;
        startActivity(intent);
    }

3>:最后直接 在SerializableActivity中去取出 传递过来的数据即可;

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/4/2 15:48
 * Version 1.0
 * Params:
 * Description:   SerializableActivity 取出传递过来的数据
*/
public class SerializableActivity extends AppCompatActivity {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_serializable);

        TextView test_serializable = (TextView) findViewById(R.id.test_serializable);

        Person person = (Person) getIntent().getSerializableExtra(MainActivity.SER_KEY);
        test_serializable.setText("name -> " + person.getName() + " age -> " + person.getAge());
    }
}
以上是使用 Serializable传递对象的

3.2 Parceable传递对象的具体实现

1>:首先写一个 Police,它是一个JavaBean对象,必须实现Parceable接口,需要重写3个方法
describeContents(): 返回0就行;
writeToParcel():用于将类中的数据写入 外部提供的Parcel中;
Parcelable.Creator<Police>接口:变量名必须是CREATOR,可以使用final、static修饰,这个接口有两个方法,分别是:
createFormParcel()、newArray()
2>: 然后定义一个 parcleableMethod()方法,作用是使用 Parcelable传递对象;

    /**
     *  Parceable传递对象的方法
     */
    private void parceableMethod() {
        Police mPolice = new Police() ;
        mPolice.setName("I am JackChen");
        mPolice.setWorkTime(2008);

        Intent intent = new Intent(this , ParceableActivity.class) ;
        Bundle bundle = new Bundle() ;
        bundle.putParcelable(PAR_KEY , mPolice);
        intent.putExtras(bundle) ;
        startActivity(intent);
    }

3>:最后直接在 ParcleableActivity中 取出 传递过来的数据即可;

/**
 * Email: 2185134304@qq.com
 * Created by JackChen 2018/4/2 15:48
 * Version 1.0
 * Params:
 * Description:   ParceableActivity取出传递过来的数据
*/
public class ParceableActivity extends AppCompatActivity {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_parceable);

        TextView test_parceable = (TextView) findViewById(R.id.test_parceable);
        Police mPolice = (Police)getIntent().getParcelableExtra(MainActivity.PAR_KEY);
        test_parceable.setText("name -> " + mPolice.getName() + "worktime -> " + mPolice.getWorkTime());

    }
}

以上就是使用 Serializable和Parcleable传递对象的具体实现方式

4. Serializable 和 Parceable 二者区别


Serializable:代码少,效率低;
Parcelable: 代码多,效率高;
所以Android开发中应该尽可能的使用Parcleable,效率至上

具体代码已上传至github:
https://github.com/shuai999/SerializableDemo.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容