android 对象 保存,Android使用SharedPreferences保存对象
核心原理:
对象序列化
步骤
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保存对象相关推荐
- Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数
16_采用SharedPreferences保存用户偏好设置参数 Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数 2013-03-08 16_采用Shar ...
- android 使用SharedPreferences保存对象
今天,简单讲讲Android如何使用SharedPreferences保存对象. 记得之前写过一遍博客关于android如何使用SharedPreferences保存List<String> ...
- Android SharedPreferences保存和读取对象
SharedPreferences保存和读取对象 1.首先要序列化对象(以下是序列化实体类的样例,不方便贴出实体类全部的代码) public class LoginResult extends Bas ...
- android 屏幕关闭 eofexception,android EOFException异常解决办法 (SharedPreferences保存对象)...
SharePreferences可以保存String 但是不能保存对象 这不符合面向对象. 为此可以通过序列化和反序列化将Serializable对象和字符串相互转化 所以可以将Serizlizabl ...
- android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...
Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者 ...
- android 保存ArrayListObject至SharedPreferences
今天,简单讲讲如何保持ArrayList<Object>到SharedPreferences. 之前讲了保持ArrayList<String>到SharedPreference ...
- android 偏好设置,SharedPreferences保存、显示用户偏好设置
例如要保存用户的姓名和年龄两个参数,如下图布局 1.在strings.xml文件中声明要使用到的字符串 2.在布局文件中添加,,控件,实现上图的布局 android:layout_width=&quo ...
- android SharedPreferences 存储对象
原文地址为: android SharedPreferences 存储对象 我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPre ...
- android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能
1. 简介 SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息. 2. 使用方式 2.1 获取Shared ...
最新文章
- 转换字符串中汉字为其拼音缩写(C#)
- Java黑皮书课后题第5章:*5.31(金融应用:计算CD价值)假设你用10 000美元投资一张CD,年利率为5.75%。编写程序,提示由用户输入一个金额数、年获利率、月份数,然后显示一个表格
- E104-BT02蓝牙无线传输模块物联网芯片的智能控制、采集
- 我是如何解决gitlab 命令行上传需要输密码
- 1560F1. Nearest Beautiful Number (easy version)
- SynchronizationContext(同步上下文)综述
- 实验四android开发基础
- web中缓存的几种方式
- Spss的基本方法使用步骤
- ffmpeg hevc 10bit bt2020 cbr
- html企业微信发送消息,通过企业微信API接口发送消息到个人微信
- Common Electrical I/O (CEI)
- 布丰投针实验(如何将Geogebra动态文件嵌入博客中)
- html5绘制变换图形-旋转图形
- Ubuntu 修改分辨率
- P4165 [SCOI2007]组队 推柿子+差分
- Java-底层建筑-JVM-第3篇-StringTable
- 微信小程序--引用第三方组件
- 【Android】RXAndroid
- 【火灾检测】森林火灾检测系统(带面板)【含GUI Matlab源码 1921期】
热门文章
- FPU烤机是什么意思 FPU烤机用什么软件
- [翻译/转载] 部分使用intel RST硬盘驱动与电脑安装Linux系列系统相互冲突 导致无法装linux系统的解决方法
- FlexRay 介绍
- Python基础之数据类型II
- 大乐透号码 及数据库查询语句
- 国际知名投资者法律顾问ROSEN鼓励Tarena International, Inc.投资者在TEDU证券集体诉讼的重要截止日期8月23日之前聘请律师
- python日记_递归
- nova6se是华为鸿蒙系统吗,华为荣耀9x和nova6se哪个性价比高?_科技数码通
- kinect_试衣间(1)
- A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to ge