【转】Android中intent传递对象和Bundle的用法


原文网址:http://blog.csdn.net/lixiang0522/article/details/8642202

android中的组件间传递的对象一般实现Parcelable接口,当然也可以使用java的Serializable接口,前者是android专门设计的,效率更高,下面我们就来实现一个Parcelabel。 1. 创建一个类实现Parcelable接口,具体实现如下:
[java]view plaincopy
  1. packagecom.hebaijun.testparcelable;
  2. importandroid.os.Parcel;
  3. importandroid.os.Parcelable;
  4. publicclassParcelableDataimplementsParcelable{
  5. privateStringname;
  6. privateintage;
  7. publicParcelableData(){
  8. name="guest";
  9. age=20;
  10. }
  11. publicParcelableData(Parcelin){
  12. //顺序要和writeToParcel写的顺序一样
  13. name=in.readString();
  14. age=in.readInt();
  15. }
  16. publicStringgetName(){
  17. returnname;
  18. }
  19. publicvoidsetName(Stringname){
  20. this.name=name;
  21. }
  22. publicintgetAge(){
  23. returnage;
  24. }
  25. publicvoidsetAge(intage){
  26. this.age=age;
  27. }
  28. @Override
  29. publicintdescribeContents(){
  30. //TODOAuto-generatedmethodstub
  31. return0;
  32. }
  33. @Override
  34. publicvoidwriteToParcel(Parceldest,intflags){
  35. //TODOAuto-generatedmethodstub
  36. dest.writeString(name);
  37. dest.writeInt(age);
  38. }
  39. publicstaticfinalParcelable.Creator<ParcelableData>CREATOR=newParcelable.Creator<ParcelableData>(){
  40. publicParcelableDatacreateFromParcel(Parcelin){
  41. returnnewParcelableData(in);
  42. }
  43. publicParcelableData[]newArray(intsize){
  44. returnnewParcelableData[size];
  45. }
  46. };
  47. }


2. 通过下面的方法发送对象。Bundle类也实现了Parcelable接口,一般在android中我们是通过Bundle来封装数据并进行传送的。
[java]view plaincopy
  1. Intentintent=newIntent();
  2. intent.setClass(this,SubActivity.class);
  3. //直接添加
  4. //intent.putExtra("MyData",newParcelableData());
  5. //通过Bundle
  6. Bundlebundle=newBundle();
  7. bundle.putString("MyString","testbundle");
  8. bundle.putParcelable("MyData",newParcelableData());
  9. intent.putExtras(bundle);
  10. startActivity(intent);


3. 下面的接收对象的方法。
[java]view plaincopy
  1. //ParcelableDataparcelableData=getIntent().getParcelableExtra("MyData");
  2. Bundlebundle=getIntent().getExtras();
  3. ParcelableDataparcelableData=bundle.getParcelable("MyData");
  4. StringtestBundleString=bundle.getString("MyString");
  5. Log.v("string=",testBundleString);
  6. Log.v("name=",parcelableData.getName());
  7. Log.v("age=",""+parcelableData.getAge());

传输的对象需要实现序列化:有两种方式,一种是实现Serializable接口,就是原来的java方式;另外一种是android的Parcelable方式,这个性能可能好一些,我猜的,但是这在需要手动去写Parcelable接口的实现。

Serializable存数据:

  1. PersonmPerson=newPerson();
  2. mPerson.setName("frankie");
  3. mPerson.setAge(25);
  4. IntentmIntent=newIntent(this,ObjectTranDemo1.class);
  5. BundlemBundle=newBundle();
  6. mBundle.putSerializable(SER_KEY,mPerson);
  7. mIntent.putExtras(mBundle);

Serializable取数据:

// 获取启动该ResultActivity的Intent
24 Intent intent = getIntent();
25 // 获取该Intent所携带的数据
26 Bundle bundle = intent.getExtras();
27 // 从bundle数据包中取出数据
28 Person person = (Person) bundle.getSerializable("person");

Parcelable存数据:

  1. IntentmIntent=newIntent(this,ObjectTranDemo2.class);
  2. BundlemBundle=newBundle();
  3. mBundle.putParcelable(PAR_KEY,mBook);
  4. mIntent.putExtras(mBundle);

Parcelable取数据:


  1. BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);

参考1:http://blog.csdn.net/Android_Tutor/article/details/5740845

参考2:http://my.oschina.net/u/577632/blog/76906

优质内容筛选与推荐>>
1、ajax的session失效异常的捕获(Sys.WebForms.PageRequestManagerParserErrorException)
2、Linux 使用者身份與群組記錄的檔案
3、Linq查询
4、深入理解JavaScript系列(26):设计模式之构造函数模式
5、Adodb.recorset中Field字段的属性及意义


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn