微信公众号制作开发 微信小程序定制开发 网站建设制作 手机app软件开发

您的位置:首页 > 技术观点 > 信息详情

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

来源:山东鸿软信息科技有限公司  阅读量:1527  时间:2022-02-28 18:56

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传递对象;


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,效率至上。


成为您更加专业的技术合伙人

网站建设 | APP开发 | 产品服务 | 技术观点 | 关于我们      客服电子邮箱:1828087588@qq.com  客服QQ:1828087588、1421667633  电话:151-6502-2080

Copyright © 2016-2024 山东鸿软信息科技有限公司 版权所有 https://www.greatsoft.cn 鲁ICP备16026454号