Android中SharedPreferences和序列化结合保存对象数据
2013-04-10 15:25
591 查看
前言:
最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页时,还能查看和修改。刚开始解决这个问题我们一定会从数据的大小的角度来解决,于是就有以下几种方式:
A、运用临时静态变量static来保存到内存中
B、运用SharedPreferences来保存
C、运用SQLite数据库
先来分析一下这个3种方式的优缺点, A、优点:用着随心所欲 缺点:当用户的手机有很多数据的时候,容易造成static丢失。
B、众所周知,SharedPreferences是Android平台上一个轻量级的存储类,它提供了Android平台常规的Long长
整形、Int整形、String字符串型的保存方式。对于我来说,这么多表单的数据,我可不想一个set进去(我实在是太懒了),于是把他放在一旁。
C、使用SQLite数据库,这个未免就有点拿大炮打小鸟,大材小用了,因此果断放弃。
现在切入咱们的正题,由于表单的数据,一般都是一个实体类,可以进行序列化的,序列化本身的目的是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。说白了,最终就是转换成了二进制数据,
现在就引出我的思路,
下面贴出代码:
Person.java
MainActivity.java
logcat的结果为:
最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页时,还能查看和修改。刚开始解决这个问题我们一定会从数据的大小的角度来解决,于是就有以下几种方式:
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的结果为:
![](http://img.my.csdn.net/uploads/201304/10/1365579023_7950.png)
相关文章推荐
- Android中SharedPreferences和序列化结合保存对象数据
- Android中SharedPreferences和序列化结合保存对象数据
- Android中SharedPreferences和序列化结合保存对象数据
- Android中SharedPreferences和序列化结合保存对象数据
- Android中SharedPreferences和序列化结合保存对象数据
- Android中SharedPreferences和序列化结合保存对象数据
- SharedPreferences和序列化结合保存对象数据
- ######保存角色,add表单页面Ajax传参给action,多个集合属性,【较为复杂的页面传参(封装ajax json参数)】:注意表单数据序列化,jquery遍历,json对象转String
- Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
- android数据存储读取3:对象保存(对比IOS)
- 【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化
- Android进阶——Sharedpreferences保存对象和图片等复杂类型的数据
- Android中使用xml保存数据(xml文件序列化)及使用pull解析xml文件
- Android几种数据存储方式及bean对象序列化
- .NetFramework 数据保存与传输之序列化对象
- android 之 SharedPreferences 保存对象数据
- java中将数据对象序列化后保存到数据库中,并反序列化取出显示
- Android中数据的传递以及对象序列化
- unserialize的这个问题是由一个emlog论坛用户在使用时报错而发现的 问题表现情况如下: emlog缓存的保存方式是将php的数据对象(数组)序列化(serialize)后以文件的形式存放,
- sharedPreference存储对象-数据库存储对象;android 将map保存到sqlite数据库中,从表数据中取回map