Android SharedPreferences保存和读取对象
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保存和读取对象相关推荐
- android SharedPreferences保存list数据
今天,简单讲讲如何使用 SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static boolean saveA ...
- android 同步list数据,android SharedPreferences保存list数据
释放双眼,带上耳机,听听看~! 今天,简单讲讲如何使用SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static b ...
- android读取网络配置文件,Android 中保存、读取设置配置数据、记录登录状态
记录登录状态,我认为可以在用户登录成功后,与服务器约定一个 token 凭据,保存这个 token 凭据,而不是直接保存用户名.密码. 当然,保存 token 与保存设置数据是一样的,本文只讲解如何保 ...
- Android SharedPreferences保存Map集合
Android中数据存储方式: 1 使用SharedPreferences存储数据: 2 文件存储数据: 3 SQLite数据库存储数据: 4 使用ContentProvider存储数据: 5 网络存 ...
- android 使用SharedPreferences保存对象
今天,简单讲讲Android如何使用SharedPreferences保存对象. 记得之前写过一遍博客关于android如何使用SharedPreferences保存List<String> ...
- android 对象 保存,Android使用SharedPreferences保存对象
核心原理: 对象序列化 步骤 1.要保存的对象实现序列化Serializable 2.将序列化的对象保存String(本文的做法是保存为byte数组在转为16进制的String类型保存起来) 3.将保 ...
- android SharedPreferences 存储对象
原文地址为: android SharedPreferences 存储对象 我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPre ...
- android 清空sp数据,Android 使用 SharedPreferences 保存少量数据的实现代码
1 SharedPreferences 介绍 SharedPreferences是使用键值对的方式来存储数据的 SharedPreferences share = getSharedPreferenc ...
- Android:登录保存回显用户信息或配置文件(sharedpreferences)
登录保存回显用户信息或配置文件(sharedpreferences) 目录 登录保存回显用户信息或配置文件(sharedpreferences) 1.项目目录结构 二.类:MainActivity 三 ...
最新文章
- 小作文十大必背范文:五星级真题
- java中怎样克隆,如何在Java中克隆列表?
- libevent中的缓冲区(一)
- linux 安装 加入内核参数,Linux 实现自动安装服务组件以及优化内核参数
- python列表推导式格式_Python列表推导式(for表达式)及用法
- 猎豹浏览器网页声音怎么关闭
- 10个学习Android开发的网站推荐
- (11)VHDL例化system Verilog
- HEVC码流简单分析
- 背包九讲----整理+例题
- 计算机本地组策略编辑器在哪里,win7系统本地组策略编辑器在哪的操作方法
- 计算机硬件知识应用,计算机硬件知识 (很详细)
- C++实现基于博弈树的5x5一子棋人机对战
- 软件体系结构KWIC索引结构
- 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
- 广度优先搜索(BFS)---农夫与牛
- 海康威视插件播放视频流
- 图像识别,让公式搬运不再麻烦!
- linux内核zfs,Linux使用ZFS文件系统
- Css字体中英文对照表
热门文章
- 「每周CV论文推荐」 初学深度学习人脸属性分析必读的文章
- AI综述专栏 | 基于深度学习的目标检测算法综述
- 新思科技Chekib:AI芯片架构创新面临四大挑战
- 言论丨马库斯回应14大质疑,重申深度学习怀疑论
- 谷歌工程师:聊一聊深度学习的weight initialization
- Tensorflow— name/variable_scope
- Nature封面,硅量子计算达到99%的准确率
- NB-IoT,你真是太让我失望了
- 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势
- 2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴