Android中SharedPreferences和序列化結合儲存對象資料

來源:互聯網
上載者:User

標籤:

前言

       最近在做使用者註冊的時候,遇到了需要填寫很多表單資料,不可能在一頁把所有的資料都展示完全,因此採用了分頁的方式,由於在使用者填寫資料資料之後我們需要對使用者填寫的資料進行暫時的記錄的,當使用者會到此頁時,還能查看和修改。剛開始解決這個問題我們一定會從資料的大小的角度來解決,於是就有以下幾種方式:

                             A、運用臨時靜態變數static來儲存到記憶體中

                              B、運用SharedPreferences來儲存

                              C、運用SQLite資料庫

          先來分析一下這個3種方式的優缺點, A、優點:用著隨心所欲 缺點:當使用者的手機有很多資料的時候,容易造成static丟失。

                               B、眾所周知,SharedPreferences是Android平台上一個輕量級的儲存類,它提供了Android平台常規的Long長
整形、Int整形、String字串型的儲存方式。對於我來說,這麼多表單的資料,我可不想一個set進去(我實在是太懶了),於是把他放在一旁。

    C、使用SQLite資料庫,這個未免就有點拿大炮打小鳥,大材小用了,因此果斷放棄。

      現在切入咱們的正題,由於表單的資料,一般都是一個實體類,可以進行序列化的,序列化本身的目的是將對象的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,對象將其目前狀態寫入到臨時或持久性儲存區。以後,可以通過從儲存區中讀取或還原序列化對象的狀態,重新建立該對象。說白了,最終就是轉換成了位元據,

現在就引出我的思路,

1.類對象2.序列化3.得到字串資料4.儲存(android五種儲存方式)5.按照儲存方式來擷取資料6.還原序列化7.得到相應的對象
 

下面貼出代碼:

Person.java

package com.example.shareddatatest;import java.io.Serializable;public class Person implements Serializable {    /**     *      */    private static final long serialVersionUID = 1L;    String name;    int age;    String address;    String education;    String tel;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getEducation() {        return education;    }    public void setEducation(String education) {        this.education = education;    }    public String getTel() {        return tel;    }    public void setTel(String tel) {        this.tel = tel;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    String sex;    @Override    public String toString() {        return "Person [name=" + name + ", age=" + age + ", address=" + address                + ", education=" + education + ", tel=" + tel + ", sex=" + sex                + "]";    }}

MainActivity.java

package com.example.shareddatatest;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    Person person = null;    long startTime = 0l;    long endTime = 0l;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        person = new Person();        person.setName("LULU");        person.setSex("bitch");        person.setAddress("北京海澱");        person.setAge(20);        person.setTel("1231312");        person.setEducation("小學");    }    /**     * 序列化對象     *      * @param person     * @return     * @throws IOException     */    private String serialize(Person person) throws IOException {        startTime = System.currentTimeMillis();        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        ObjectOutputStream objectOutputStream = new ObjectOutputStream(                byteArrayOutputStream);        objectOutputStream.writeObject(person);        String serStr = byteArrayOutputStream.toString("ISO-8859-1");        serStr = java.net.URLEncoder.encode(serStr, "UTF-8");        objectOutputStream.close();        byteArrayOutputStream.close();        Log.d("serial", "serialize str =" + serStr);        endTime = System.currentTimeMillis();        Log.d("serial", "序列化耗時為:" + (endTime - startTime));        return serStr;    }    /**     * 還原序列化對象     *      * @param str     * @return     * @throws IOException     * @throws ClassNotFoundException     */    private Person deSerialization(String str) throws IOException,            ClassNotFoundException {        startTime = System.currentTimeMillis();        String redStr = java.net.URLDecoder.decode(str, "UTF-8");        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(                redStr.getBytes("ISO-8859-1"));        ObjectInputStream objectInputStream = new ObjectInputStream(                byteArrayInputStream);        Person person = (Person) objectInputStream.readObject();        objectInputStream.close();        byteArrayInputStream.close();        endTime = System.currentTimeMillis();        Log.d("serial", "還原序列化耗時為:" + (endTime - startTime));        return person;    }    void saveObject(String strObject) {        SharedPreferences sp = getSharedPreferences("person", 0);        Editor edit = sp.edit();        edit.putString("person", strObject);        edit.commit();    }    String getObject() {        SharedPreferences sp = getSharedPreferences("person", 0);        return sp.getString("person", null);    }    public void onclick(View v) {        switch (v.getId()) {        case R.id.button1:            try {                saveObject(serialize(person));            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            break;        case R.id.button2:            try {                Person person = deSerialization(getObject());                Log.d("serial", person.toString());            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (ClassNotFoundException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            break;        default:            break;        }    }}

logcat的結果為:

Android中SharedPreferences和序列化結合儲存對象資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.