zoukankan      html  css  js  c++  java
  • 【转】Android中intent传递对象和Bundle的用法

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

    android中的组件间传递的对象一般实现Parcelable接口,当然也可以使用java的Serializable接口,前者是android专门设计的,效率更高,下面我们就来实现一个Parcelabel。
     
    1. 创建一个类实现Parcelable接口,具体实现如下:
    [java] view plain copy
     
    1. package com.hebaijun.testparcelable;  
    2.   
    3. import android.os.Parcel;  
    4. import android.os.Parcelable;  
    5.   
    6. public class ParcelableData implements Parcelable{  
    7.     private String name;  
    8.     private int age;  
    9.       
    10.     public ParcelableData(){  
    11.         name = "guest";  
    12.         age = 20;  
    13.     }  
    14.       
    15.     public ParcelableData(Parcel in){  
    16.         //顺序要和writeToParcel写的顺序一样  
    17.         name = in.readString();  
    18.         age = in.readInt();  
    19.     }  
    20.       
    21.     public String getName(){  
    22.         return name;  
    23.     }  
    24.       
    25.     public void setName(String name){  
    26.         this.name = name;  
    27.     }  
    28.       
    29.     public int getAge(){  
    30.         return age;  
    31.     }  
    32.       
    33.     public void setAge(int age) {  
    34.         this.age = age;  
    35.     }  
    36.   
    37.     @Override  
    38.     public int describeContents() {  
    39.         // TODO Auto-generated method stub  
    40.         return 0;  
    41.     }  
    42.   
    43.     @Override  
    44.     public void writeToParcel(Parcel dest, int flags) {  
    45.         // TODO Auto-generated method stub  
    46.         dest.writeString(name);  
    47.         dest.writeInt(age);  
    48.     }  
    49.       
    50.     public static final Parcelable.Creator<ParcelableData> CREATOR = new Parcelable.Creator<ParcelableData>() {  
    51.         public ParcelableData createFromParcel(Parcel in) {  
    52.             return new ParcelableData(in);  
    53.         }  
    54.           
    55.         public ParcelableData[] newArray(int size) {  
    56.             return new ParcelableData[size];  
    57.         }  
    58.     };  
    59.   
    60. }  


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


    3. 下面的接收对象的方法。
    [java] view plain copy
     
    1. //ParcelableData parcelableData = getIntent().getParcelableExtra("MyData");  
    2. Bundle bundle = getIntent().getExtras();  
    3. ParcelableData parcelableData = bundle.getParcelable("MyData");  
    4. String testBundleString = 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. Person mPerson = new Person();  
    2.         mPerson.setName("frankie");  
    3.         mPerson.setAge(25);  
    4.         Intent mIntent = new Intent(this,ObjectTranDemo1.class);  
    5.         Bundle mBundle = new Bundle();  
    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. Intent mIntent = new Intent(this,ObjectTranDemo2.class);  
    2.         Bundle mBundle = new Bundle();  
    3.         mBundle.putParcelable(PAR_KEY, mBook);  
    4.         mIntent.putExtras(mBundle);

    Parcelable取数据:


    1.         Book mBook = (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

  • 相关阅读:
    P3973 [TJOI2015]线性代数
    P3168 [CQOI2015]任务查询系统
    二次剩余学习笔记
    URL注入攻击+知识星球资源整理
    我的网络安全架构知识点的总结(待完善)
    Sudo提权
    DNSlog平台各种利用姿势(盲注)
    Wireshark抓包理论加实操
    Fofa搜索技巧(理论加实践的整理)
    Windows留后门维持权限(其中包括详细的telnet改端口与连接)
  • 原文地址:https://www.cnblogs.com/wi100sh/p/5403851.html
Copyright © 2011-2022 走看看