码迷,mamicode.com
首页 > 其他好文 > 详细

第五章 以数据为中心—数据存取(3)

时间:2015-01-29 10:31:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:android   android开发   经验分享   

5.1.3自由操作随心所欲—序列化和反序列化

在Android开发中,除了经常会操作普通的文本文件和XML文件以外,也会经常使用序列化和反序列化的方式传递或者存取数据。

Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。

下面就介绍一下使用Parcelable接口,实现两个Activity之间对象的传递,这里就要用到bundle.putParcelable实现传递对象。

1)声明实现接口Parcelable。

// import略

public class Person implements Parcelable{ 

 

    protected String name;

    protected String age;

 

    Person(String name,String age) { 

        this.name = name; 

        this.age = age; 

    } 

    Person(Parcel in) { 

        name = in.readString(); 

        age = in.readString();  

    } 

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getAge() {

        return age;

    }

    public void setAge(String age) {

        this.age = age;

    }

    @Override

    public int describeContents() {

        return 0;

    }

    /**

     * 实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象

     */

    @Override

    public void writeToParcel(Parcel dest, int flags) {

        dest.writeString(name); 

        dest.writeString(age); 

    }

    /**

     * 实例化静态内部对象CREATOR实现接口Parcelable.Creator

     */

    public static final Creator<Person> CREATOR = new Creator<Person>() { 

        public Person createFromParcel(Parcel in) { 

            return new Person(in); 

        } 

        public Person[] newArray(int size) { 

            return new Person[size]; 

        } 

    }; }

 

2)实现Parcel对象序列化为你的对象,并将Parcelable放入Bundle中。

// import略

public class ParcelableActivity1  extends Activity {

 

    private Button myButton; 

 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        myButton = new Button(this); 

        myButton.setOnClickListener(new OnClickListener() { 

            @Override 

            public void onClick(View arg0) { 

            // 创建Person对象

            Person benParcelable = new Person("testname","testage"); 

                Intent intent = new Intent(); 

                intent.setClass(getApplicationContext(),

                                ParcelableActivity2.class); 

                Bundle bundle = new Bundle(); 

                // 将序列化对象放入bundle

                bundle.putParcelable("person", benParcelable); 

                intent.putExtras(bundle); 

                // 启动ParcelableActivity2的Activity

                startActivity(intent); 

            } 

        }); 

        setContentView(myButton); 

    } 

}

 

3)实现方法createFromParcel,将Parcel对象反序列化为你的对象。

// import略

public class ParcelableActivity2 extends Activity {

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        // 获取反序列化后的Person对象

        Person parcelable = getIntent().getParcelableExtra("person"); 

        // 打印输出

        System.out.println(parcelable.getName()); 

        System.out.println(parcelable.getAge()); 

    } 

}

 

--------------------------------------------
程序员赚钱不易 一定要学会理财
平安陆金所 隶属于平安集团的p2p平台
年投资回报率7%-9% 是替代银行理财的首选
个人经验 推荐投资安鑫或者有担保的彩虹项目
不要投资安e 那个几乎无法转让 想提前提现非常困难
首次投资1000元即可额外赚几百元 不赚白不赚
--------------------------------------------

4)显示结果,如图5-2所示。

技术分享

图 5-2 序列化反序列化的结果

 

经验分享:

除了可以利用序列化和反序列化在Activity之间传递Object类型的数据以外,我们也可以利用它来保存和读取数据。

和纯文本文件、XML文件相比,序列化文件可以是二进制的文件,而不是纯文本的,不能直接阅读。所以,如果保存的数据有一定的安全性要求,而安全性的级别又不是非常高,就可以考虑使用序列化的方式进行保存,然后使用反序列化的方式读取。

第五章 以数据为中心—数据存取(3)

标签:android   android开发   经验分享   

原文地址:http://blog.csdn.net/arui319/article/details/43266701

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!