久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Parcelable接口的使用

 昵稱11482448 2013-03-31

 

什么是Parcelable ,?

     Parcelable,定義了將數(shù)據(jù)寫入Parcel,,和從Parcel中讀出的接口。一個(gè)實(shí)體(用類來表示),,如果需要封裝到消息中去,,就必須實(shí)現(xiàn)這一接口,實(shí)現(xiàn)了這一接口,,該實(shí)體就成為“可打包的”了,。

 

Parcelable 傳遞對象

    Android序列化對象主要有兩種方法:

    1.實(shí)現(xiàn)Serializable接口,實(shí)現(xiàn)Serializable接口是JavaSE本身就支持的;

    2.實(shí)現(xiàn)Parcelable接口,Parcelable是Android特有的功能,效率比實(shí)現(xiàn)Serializable接口高,,像用于Intent數(shù)據(jù)傳遞也都支持,,而且還可以用在進(jìn)程間通信(IPC),

      除了基本類型外,,只有實(shí)現(xiàn)了Parcelable接口的類才能被放入Parcel中,。

 

Parcelable接口定義

復(fù)制代碼
public interface Parcelable {
    //內(nèi)容描述接口,基本不用管
    public int describeContents();
    //寫入接口函數(shù),,打包
    public void writeToParcel(Parcel dest, int flags);
     //讀取接口,,目的是要從Parcel中構(gòu)造一個(gè)實(shí)現(xiàn)了Parcelable的類的實(shí)例處理。因?yàn)閷?shí)現(xiàn)類在這里還是不可知的,,所以需要用到模板的方式,繼承類名通過模板參數(shù)傳入,。
    //為了能夠?qū)崿F(xiàn)模板參數(shù)的傳入,,這里定義Creator嵌入接口,內(nèi)含兩個(gè)接口函數(shù)分別返回單個(gè)和多個(gè)繼承類實(shí)例。
    public interface Creator<T> {
           public T createFromParcel(Parcel source);
           public T[] newArray(int size);
       }
復(fù)制代碼

 

怎么實(shí)現(xiàn)Parcelable接口,?

   從parcelable接口定義中,,我們可以看到,實(shí)現(xiàn)parcelable接口,,需要我們實(shí)現(xiàn)下面幾個(gè)方法:

   1.describeContents方法,。內(nèi)容接口描述,,默認(rèn)返回0就可以;

   2.writeToParcel 方法。該方法將類的數(shù)據(jù)寫入外部提供的Parcel中.即打包需要傳遞的數(shù)據(jù)到Parcel容器保存,,以便從parcel容器獲取數(shù)據(jù),,該方法聲明如下:

     writeToParcel (Parcel dest, int flags) 具體參數(shù)含義見javadoc

   3.靜態(tài)的Parcelable.Creator接口,本接口有兩個(gè)方法:

     createFromParcel(Parcel in)  從Parcel容器中讀取傳遞數(shù)據(jù)值,,封裝成Parcelable對象返回邏輯層,。

     newArray(int size) 創(chuàng)建一個(gè)類型為T,長度為size的數(shù)組,,僅一句話(return new T[size])即可,。方法是供外部類反序列化本類數(shù)組使用。

 

代碼實(shí)現(xiàn)

    1.封裝數(shù)據(jù),,把實(shí)現(xiàn)parcelable接口的Person對象傳遞到TwoActivity里;

復(fù)制代碼
public class DemoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 封裝數(shù)據(jù)
        Person p = new Person();
        p.setId(1);
        p.setName("xiaoming");
        // 用Intent傳遞Person對象
        Intent i = new Intent(this, TwoActivity.class);
        i.putExtra("Person", p);
        startActivity(i);
    }
}
復(fù)制代碼

 

   2.TwoActivity獲取數(shù)據(jù),,從DemoActivity傳遞的Person對象給解析,并打??;

   

復(fù)制代碼
public class TwoActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        
        Person p = (Person)getIntent().getParcelableExtra("Person");
        
        System.out.println("p_id"+p.getId());
        System.out.println("p_name"+p.getName());
    }
}
復(fù)制代碼

 

3.parcelable接口的實(shí)現(xiàn)

復(fù)制代碼
 1 public class Person implements Parcelable{
 2     
 3     // 成員變量
 4     private int id;
 5     private String name;
 6     
 7     // 1.必須實(shí)現(xiàn)Parcelable.Creator接口,否則在獲取Person數(shù)據(jù)的時(shí)候,會(huì)報(bào)錯(cuò),,如下:
 8     // android.os.BadParcelableException:
 9     // Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.um.demo.Person
10     // 2.這個(gè)接口實(shí)現(xiàn)了從Percel容器讀取Person數(shù)據(jù),,并返回Person對象給邏輯層使用
11     // 3.實(shí)現(xiàn)Parcelable.Creator接口對象名必須為CREATOR,不如同樣會(huì)報(bào)錯(cuò)上面所提到的錯(cuò),;
12     // 4.在讀取Parcel容器里的數(shù)據(jù)事,,必須按成員變量聲明的順序讀取數(shù)據(jù),不然會(huì)出現(xiàn)獲取數(shù)據(jù)出錯(cuò)
13     // 5.反序列化對象
14     public static final Parcelable.Creator<Person> CREATOR = new Creator(){
15 
16         @Override
17         public Person createFromParcel(Parcel source) {
18             // TODO Auto-generated method stub
19             // 必須按成員變量聲明的順序讀取數(shù)據(jù),,不然會(huì)出現(xiàn)獲取數(shù)據(jù)出錯(cuò)
20             Person p = new Person();
21             p.setId(source.readInt());
22             p.setName(source.readString());
23             return p;
24         }
25 
26         @Override
27         public Person[] newArray(int size) {
28             // TODO Auto-generated method stub
29             return new Person[size];
30         }
31     };
32     
33     public int getId() {
34         return id;
35     }
36 
37     public void setId(int id) {
38         this.id = id;
39     }
40 
41     public String getName() {
42         return name;
43     }
44 
45     public void setName(String name) {
46         this.name = name;
47     }
48 
49     @Override
50     public int describeContents() {
51         // TODO Auto-generated method stub
52         return 0;
53     }
54 
55     @Override
56     public void writeToParcel(Parcel dest, int flags) {
57         // TODO Auto-generated method stub
58         // 1.必須按成員變量聲明的順序封裝數(shù)據(jù),,不然會(huì)出現(xiàn)獲取數(shù)據(jù)出錯(cuò)
59         // 2.序列化對象
60         dest.writeInt(id);
61         dest.writeString(name);
62     }
63 }
復(fù)制代碼

 

 

好了,parcelable接口的實(shí)現(xiàn),,到處結(jié)束?。?/strong>

 

轉(zhuǎn)載請注明出處:http://www.cnblogs.com/hpboy

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多