核心原理:

对象序列化

步骤

1.要保存的对象实现序列化Serializable

2.将序列化的对象保存String(本文的做法是保存为byte数组在转为16进制的String类型保存起来)

3.将保存的String反序列化为对象

下面是完整代码

步骤1.要保存的对象实现序列化Serializablepublic class Sertest implements Serializable{

private String name;

private int age;

}步骤2。将序列化的对象保存String(本文的做法是保存为byte数组在转为16进制的String类型保存起来)

步骤3.将保存的String反序列化为对象/**

* desc:保存对象

* @param context

* @param key

* @param obj 要保存的对象,只能保存实现了serializable的对象

* modified:

*/

public static void saveObject(Context context,String key ,Object obj){

try {

// 保存对象

SharedPreferences.Editor sharedata = context.getSharedPreferences(FILENAME, 0).edit();

//先将序列化结果写到byte缓存中,其实就分配一个内存空间

ByteArrayOutputStream bos=new ByteArrayOutputStream();

ObjectOutputStream os=new ObjectOutputStream(bos);

//将对象序列化写入byte缓存

os.writeObject(obj);

//将序列化的数据转为16进制保存

String bytesToHexString = bytesToHexString(bos.toByteArray());

//保存该16进制数组

sharedata.putString(key, bytesToHexString);

sharedata.commit();

} catch (IOException e) {

e.printStackTrace();

Log.e("", "保存obj失败");

}

}

/**

* desc:将数组转为16进制

* @param bArray

* @return

* modified:

*/

public static String bytesToHexString(byte[] bArray) {

if(bArray == null){

return null;

}

if(bArray.length == 0){

return "";

}

StringBuffer sb = new StringBuffer(bArray.length);

String sTemp;

for (int i = 0; i < bArray.length; i++) {

sTemp = Integer.toHexString(0xFF & bArray[i]);

if (sTemp.length() < 2)

sb.append(0);

sb.append(sTemp.toUpperCase());

}

return sb.toString();

}

/**

* desc:获取保存的Object对象

* @param context

* @param key

* @return

* modified:

*/

public Object readObject(Context context,String key ){

try {

SharedPreferences sharedata = context.getSharedPreferences(FILENAME, 0);

if (sharedata.contains(key)) {

String string = sharedata.getString(key, "");

if(TextUtils.isEmpty(string)){

return null;

}else{

//将16进制的数据转为数组,准备反序列化

byte[] stringToBytes = StringToBytes(string);

ByteArrayInputStream bis=new ByteArrayInputStream(stringToBytes);

ObjectInputStream is=new ObjectInputStream(bis);

//返回反序列化得到的对象

Object readObject = is.readObject();

return readObject;

}

}

} catch (StreamCorruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//所有异常返回null

return null;

}

/**

* desc:将16进制的数据转为数组

*

创建人:聂旭阳 , 2014-5-25 上午11:08:33

* @param data

* @return

* modified:

*/

public static byte[] StringToBytes(String data){

String hexString=data.toUpperCase().trim();

if (hexString.length()%2!=0) {

return null;

}

byte[] retData=new byte[hexString.length()/2];

for(int i=0;i

{

int int_ch; // 两位16进制数转化后的10进制数

char hex_char1 = hexString.charAt(i); 两位16进制数中的第一位(高位*16)

int int_ch1;

if(hex_char1 >= '0' && hex_char1 <='9')

int_ch1 = (hex_char1-48)*16; 0 的Ascll - 48

else if(hex_char1 >= 'A' && hex_char1 <='F')

int_ch1 = (hex_char1-55)*16; A 的Ascll - 65

else

return null;

i++;

char hex_char2 = hexString.charAt(i); ///两位16进制数中的第二位(低位)

int int_ch2;

if(hex_char2 >= '0' && hex_char2 <='9')

int_ch2 = (hex_char2-48); 0 的Ascll - 48

else if(hex_char2 >= 'A' && hex_char2 <='F')

int_ch2 = hex_char2-55; A 的Ascll - 65

else

return null;

int_ch = int_ch1+int_ch2;

retData[i/2]=(byte) int_ch;//将转化后的数放入Byte里

}

return retData;

}

原文:http://blog.csdn.net/z8711042/article/details/26942811

android 对象 保存,Android使用SharedPreferences保存对象相关推荐

  1. Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数

    16_采用SharedPreferences保存用户偏好设置参数 Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数 2013-03-08 16_采用Shar ...

  2. android 使用SharedPreferences保存对象

    今天,简单讲讲Android如何使用SharedPreferences保存对象. 记得之前写过一遍博客关于android如何使用SharedPreferences保存List<String> ...

  3. Android SharedPreferences保存和读取对象

    SharedPreferences保存和读取对象 1.首先要序列化对象(以下是序列化实体类的样例,不方便贴出实体类全部的代码) public class LoginResult extends Bas ...

  4. android 屏幕关闭 eofexception,android EOFException异常解决办法 (SharedPreferences保存对象)...

    SharePreferences可以保存String 但是不能保存对象 这不符合面向对象. 为此可以通过序列化和反序列化将Serializable对象和字符串相互转化 所以可以将Serizlizabl ...

  5. android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

    Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者 ...

  6. android 保存ArrayListObject至SharedPreferences

    今天,简单讲讲如何保持ArrayList<Object>到SharedPreferences. 之前讲了保持ArrayList<String>到SharedPreference ...

  7. android 偏好设置,SharedPreferences保存、显示用户偏好设置

    例如要保存用户的姓名和年龄两个参数,如下图布局 1.在strings.xml文件中声明要使用到的字符串 2.在布局文件中添加,,控件,实现上图的布局 android:layout_width=&quo ...

  8. android SharedPreferences 存储对象

    原文地址为: android SharedPreferences 存储对象 我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPre ...

  9. android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能

    1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shared ...

最新文章

  1. 转换字符串中汉字为其拼音缩写(C#)
  2. Java黑皮书课后题第5章:*5.31(金融应用:计算CD价值)假设你用10 000美元投资一张CD,年利率为5.75%。编写程序,提示由用户输入一个金额数、年获利率、月份数,然后显示一个表格
  3. E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集
  4. 我是如何解决gitlab 命令行上传需要输密码
  5. 1560F1. Nearest Beautiful Number (easy version)
  6. SynchronizationContext(同步上下文)综述
  7. 实验四android开发基础
  8. web中缓存的几种方式
  9. Spss的基本方法使用步骤
  10. ffmpeg hevc 10bit bt2020 cbr
  11. html企业微信发送消息,通过企业微信API接口发送消息到个人微信
  12. Common Electrical I/O (CEI)
  13. 布丰投针实验(如何将Geogebra动态文件嵌入博客中)
  14. html5绘制变换图形-旋转图形
  15. Ubuntu 修改分辨率
  16. P4165 [SCOI2007]组队 推柿子+差分
  17. Java-底层建筑-JVM-第3篇-StringTable
  18. 微信小程序--引用第三方组件
  19. 【Android】RXAndroid
  20. 【火灾检测】森林火灾检测系统(带面板)【含GUI Matlab源码 1921期】

热门文章

  1. FPU烤机是什么意思 FPU烤机用什么软件
  2. [翻译/转载] 部分使用intel RST硬盘驱动与电脑安装Linux系列系统相互冲突 导致无法装linux系统的解决方法
  3. FlexRay 介绍
  4. Python基础之数据类型II
  5. 大乐透号码 及数据库查询语句
  6. 国际知名投资者法律顾问ROSEN鼓励Tarena International, Inc.投资者在TEDU证券集体诉讼的重要截止日期8月23日之前聘请律师
  7. python日记_递归
  8. nova6se是华为鸿蒙系统吗,华为荣耀9x和nova6se哪个性价比高?_科技数码通
  9. kinect_试衣间(1)
  10. A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to ge