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