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 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进制的数据转为数组
* <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 - 48
else if(hex_char1 >= 'A' && hex_char1 <='F')
int_ch3 = (hex_char1-55)*16; //// A 的Ascll - 65
else
return 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 - 48
else if(hex_char2 >= 'A' && hex_char2 <='F')
int_ch4 = hex_char2-55; //// A 的Ascll - 65
else
return null;
int_ch = int_ch3+int_ch4;
retData[i/2]=(byte) int_ch;//将转化后的数放入Byte里
}
return retData;
} }

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

Android SharedPreferences保存和读取对象的更多相关文章

  1. Android文件保存和读取

    public class DataActivity extends Activity { private EditText filenameText; private EditText content ...

  2. Android SharedPreferences保存第一次的信息

    private void setHomeTimeZone() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPrefere ...

  3. iOS 保存、读取与应用状态

    固化 对于大多数iOS应用,可以将其功能总结为:提供一套界面,帮助用户管理特定的数据.在这一过程中,不同类型的对象要各司其职:模型对象负责保存数据,视图对象负责显示数据,控制器对象负责在模型对象与视图 ...

  4. android SharedPreferences 存储对象

    我们知道SharedPreferences只能保存简单类型的数据,例如,String.int等. 如果想用SharedPreferences存取更复杂的数据类型(类.图像等),就需要对这些数据进行编码 ...

  5. Android之使用SharedPreferences保存用户偏好参数

    在Android应用中,我们常需要记录用户设置的一些偏好参数,,此时我们就需要用SharedPreferences和Editor将这些信息保存下来,在下次登录时读取. SharedPreference ...

  6. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  7. android如何保存读取读取文件文件保存到SDcard

    android如何保存读取读取文件文件保存到SDcard 本文来源于www.ifyao.com禁止转载!www.ifyao.com 上图为保存文件的方法体. 上图为如何调用方法体保存数据. 上面的截图 ...

  8. Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置

    Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置 2013年8月14日Android记录 很多应用都会有用户设置,用户的一些偏好可以由用户来决定 ...

  9. Android使用SharedPreferences保存数组

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

随机推荐

  1. appium+python自动化59-appium命令行参数

    Appium服务器参数 许多Appium 1.5服务器参数已被弃用,以支持--default-capabilities标志. 用法: node . [flags] help 1.cmd端口输入,app ...

  2. https跳转到http的过程在IE6中存在BUG(Bea-090475)

    前段时间做OA系统的https的安全登录功能(以前登录是采用的一般的http方式,后因为安全性考虑需要改成https的方式)在本机测试完全通过. 可是近期同事发现在测试环境下用IE6访问会出现不能访问 ...

  3. Windows Server 2003 IIS设置完全篇

    一.启用Asp支持Windows Server 2003 默认安装,是不安装 IIS 6 的,需要另外安装.安装完 IIS 6,还需要单独开启对于 ASP 的支持. 第一步,启用Asp,进入:控制面板 ...

  4. 发布设置setting.xml

    <?xml version="1.0" encoding="UTF-8"?> <!-- User-specific configuration ...

  5. 解决hiveserver2报错:java.io.IOException: Job status not available - Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

    用户使用的sql: select count( distinct patient_id ) from argus.table_aa000612_641cd8ce_ceff_4ea0_9b27_0a3a ...

  6. Spark源码分析

    名词解释 RDD全称为ResilientDistributedDataset,弹性分布式数据集.就是分布在集群节点上的数据集,这些集合可以用来进行各种操作.最重要的一点是,某个操作计算后的数据集可以缓 ...

  7. 使用jQuery动态改变图片显示大小

    当我们要显示后台传过来若干个尺寸不一的图片时,为了保证图片大小的一致性及比例的协调,需要动态改变图片显示尺寸.通过搜索,我们可以从网上找到实现此 功能的jQuery代码如下.这段代码可以使图片的大小保 ...

  8. 网络结构设计——负载均衡之LVS学习笔记(三)

    LVS按个人理解的说就是将一台Linux服务器当作路由器等功能的技术.LVS---Linux虚拟服务器. LVS实现了三种IP负载均衡技术VS/NAT.VS/TUN.VS/DR. 今天简单分享一下我在 ...

  9. Medication Reconciliation Overview

    http://www.hcsinc.net/HCS-Medication-Reconciliation/med-rec-overview.html At HCS, we've worked with ...

  10. BSTR

    BSTR A BSTR (Basic string or binary string) is a string data type that is used by COM, Automation, a ...