SharedPreferences保存和读取对象

1.首先要序列化对象(以下是序列化实体类的样例,不方便贴出实体类全部的代码)

public class LoginResult extends BaseResult implements Serializable{private static final long serialVersionUID = 1L;private String mobiletoken;

2.保存和读取对象的封装

public class ObjectSaveUtil {private final static String FILENAME = "login_data_save";private final static String KEY = "loginResult";/*** desc:保存对象     * @param context* @param key * @param obj 要保存的对象,仅仅能保存实现了serializable的对象* modified:  */public static void saveObject(Context context,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 static Object readObject(Context context){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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}//全部异常返回nullreturn null;}/*** desc:将16进制的数据转为数组* <p>创建人:聂旭阳 , 2014-5-25 上午11:08:33</p>* @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<hexString.length();i++){int int_ch;  // 两位16进制数转化后的10进制数char hex_char1 = hexString.charAt(i); 两位16进制数中的第一位(高位*16)int int_ch3;if(hex_char1 >= '0' && hex_char1 <='9')int_ch3 = (hex_char1-48)*16;    0 的Ascll - 48else if(hex_char1 >= 'A' && hex_char1 <='F')int_ch3 = (hex_char1-55)*16;  A 的Ascll - 65elsereturn null;i++;char hex_char2 = hexString.charAt(i); ///两位16进制数中的第二位(低位)int int_ch4;if(hex_char2 >= '0' && hex_char2 <='9')int_ch4 = (hex_char2-48);  0 的Ascll - 48else if(hex_char2 >= 'A' && hex_char2 <='F')int_ch4 = hex_char2-55;  A 的Ascll - 65elsereturn null;int_ch = int_ch3+int_ch4;retData[i/2]=(byte) int_ch;//将转化后的数放入Byte里}return retData;}}

挺好用的,欢迎大家复制使用

转载于:https://www.cnblogs.com/gavanwanggw/p/7340967.html

Android SharedPreferences保存和读取对象相关推荐

  1. android SharedPreferences保存list数据

    今天,简单讲讲如何使用  SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static boolean saveA ...

  2. android 同步list数据,android SharedPreferences保存list数据

    释放双眼,带上耳机,听听看~! 今天,简单讲讲如何使用SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static b ...

  3. android读取网络配置文件,Android 中保存、读取设置配置数据、记录登录状态

    记录登录状态,我认为可以在用户登录成功后,与服务器约定一个 token 凭据,保存这个 token 凭据,而不是直接保存用户名.密码. 当然,保存 token 与保存设置数据是一样的,本文只讲解如何保 ...

  4. Android SharedPreferences保存Map集合

    Android中数据存储方式: 1 使用SharedPreferences存储数据: 2 文件存储数据: 3 SQLite数据库存储数据: 4 使用ContentProvider存储数据: 5 网络存 ...

  5. android 使用SharedPreferences保存对象

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

  6. android 对象 保存,Android使用SharedPreferences保存对象

    核心原理: 对象序列化 步骤 1.要保存的对象实现序列化Serializable 2.将序列化的对象保存String(本文的做法是保存为byte数组在转为16进制的String类型保存起来) 3.将保 ...

  7. android SharedPreferences 存储对象

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

  8. android 清空sp数据,Android 使用 SharedPreferences 保存少量数据的实现代码

    1 SharedPreferences 介绍 SharedPreferences是使用键值对的方式来存储数据的 SharedPreferences share = getSharedPreferenc ...

  9. Android:登录保存回显用户信息或配置文件(sharedpreferences)

    登录保存回显用户信息或配置文件(sharedpreferences) 目录 登录保存回显用户信息或配置文件(sharedpreferences) 1.项目目录结构 二.类:MainActivity 三 ...

最新文章

  1. 小作文十大必背范文:五星级真题
  2. java中怎样克隆,如何在Java中克隆列表?
  3. libevent中的缓冲区(一)
  4. linux 安装 加入内核参数,Linux 实现自动安装服务组件以及优化内核参数
  5. python列表推导式格式_Python列表推导式(for表达式)及用法
  6. 猎豹浏览器网页声音怎么关闭
  7. 10个学习Android开发的网站推荐
  8. (11)VHDL例化system Verilog
  9. HEVC码流简单分析
  10. 背包九讲----整理+例题
  11. 计算机本地组策略编辑器在哪里,win7系统本地组策略编辑器在哪的操作方法
  12. 计算机硬件知识应用,计算机硬件知识 (很详细)
  13. C++实现基于博弈树的5x5一子棋人机对战
  14. 软件体系结构KWIC索引结构
  15. 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
  16. 广度优先搜索(BFS)---农夫与牛
  17. 海康威视插件播放视频流
  18. 图像识别,让公式搬运不再麻烦!
  19. linux内核zfs,Linux使用ZFS文件系统
  20. Css字体中英文对照表

热门文章

  1. 「每周CV论文推荐」 初学深度学习人脸属性分析必读的文章
  2. AI综述专栏 | 基于深度学习的目标检测算法综述
  3. 新思科技Chekib:AI芯片架构创新面临四大挑战
  4. 言论丨马库斯回应14大质疑,重申深度学习怀疑论
  5. 谷歌工程师:聊一聊深度学习的weight initialization
  6. Tensorflow— name/variable_scope
  7. Nature封面,硅量子计算达到99%的准确率
  8. NB-IoT,你真是太让我失望了
  9. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势
  10. 2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴