安卓中使用SharedPreferences保存javaBean类对象
来源:互联网 发布:希捷数据恢复要多少钱 编辑:程序博客网 时间:2024/06/05 19:14
安卓中保存文件的方法有多种多样的,现在说的一种就是在开发中经常用到的SharedPreferences。相信接触过一段时间安卓开发的朋友都会使用基本用法。(就算不会用,百度一下也有很多普通的用法教程)。
SharedPreferences保存数据是以键值对的方式存储Key = value;的形式。会发现有一系列的put重载方法,能存入的全是基本数据类型的value值,获取的话也是一系列的get重载方法获取value值。
那么问题来了,如果我想在value中存一个java类对象该怎么办呢?根据系统提供的API是不能存储的。
解决这个问题也就是把java类序列化以流的方式存储进去。
下面直接上代码:
public static <T> void saveBean2Sp(Context context, T t, String fileName, String keyName) { SharedPreferences preferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); ByteArrayOutputStream bos; ObjectOutputStream oos = null; try { bos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(bos); oos.writeObject(t); byte[] bytes = bos.toByteArray(); String ObjStr = Base64.encodeToString(bytes, Base64.DEFAULT); SharedPreferences.Editor editor = preferences.edit(); editor.putString(keyName, ObjStr); editor.commit(); } catch (IOException e) { e.printStackTrace(); } finally { if (oos != null) { try { oos.flush(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } } }
上面这个静态的方法就是把java类存入SharedPreferences中,第一个参数上下文对象,第二个参数需要保存的实体类,第三个参数保存的文件的名称,第四个参数键值。
注意:一定要在finally中把流关闭,因为流是非常耗费资源的。
public static <T extends Object> T getBeanFromSp(Context context, String fileName, String keyNme) { SharedPreferences preferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE); byte[] bytes = Base64.decode(preferences.getString(keyNme, ""), Base64.DEFAULT); ByteArrayInputStream bis; ObjectInputStream ois = null; T obj = null; try { bis = new ByteArrayInputStream(bytes); ois = new ObjectInputStream(bis); obj = (T) ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (ois != null) { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } } return obj; }
这个方法就是获取java类对象的方法,只需要调用时第四个参数以存入时的键值就能获取到存入的对象。
实体类:
public class LoginModelBean implements Serializable{ @SerializedName("loginTime") private String loginTime; @SerializedName("IP") private String IP; @SerializedName("id") private int id; @SerializedName("userId") private int userId; @SerializedName("token") private String token; public String getLoginTime() { return loginTime; } public void setLoginTime(String loginTime) { this.loginTime = loginTime; } public String getIP() { return IP; } public void setIP(String IP) { this.IP = IP; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getToken() { return token; } public void setToken(String token) { this.token = token; }
这里要注意:实体类一定要实现Serializable序列化接口不然会报IOException异常(这里是最容易忘记的,最好第一步就实现Serializable接口)
LoginModelBean loginModelBean = new LoginModelBean();loginModelBean.setId(response.body().getResult().getId());loginModelBean.setIP(response.body().getResult().getIP());loginModelBean.setLoginTime(response.body().getResult().getLoginTime());loginModelBean.setToken(response.body().getResult().getToken());loginModelBean.setUserId(response.body().getResult().getUserId());SPUtils.saveBean2Sp(mContext, loginModelBean,"loginData","loginModelBean");
这里创建一个实体类把数据封装好然后调用saveBean2Sp()方法把数据传进去就行了。
SPUtils.getBeanFromSp(mContext, "loginData", "loginModelBean");
取出时调用上面这个方法即可。
如有错误或遗漏,欢迎提出讨论。
阅读全文
0 0
- 安卓中使用SharedPreferences保存javaBean类对象
- 使用SharedPreferences保存对象
- 使用SharedPreferences对象保存数据
- Android使用SharedPreferences保存对象
- Android使用SharedPreferences保存对象
- android 使用sharedpreferences 保存对象
- SharedPreferences保存对象工具类
- 使用SharedPreferences保存图片与对象
- 使用SharedPreferences保存序列化对象
- Android 使用SharedPreferences对象保存账号密码
- SharedPreferences保存对象
- SharedPreferences保存对象
- sharedpreferences如何保存对象
- sharedpreferences如何保存对象
- SharedPreferences保存对象
- 使用SharedPreferences保存对象(图片)类型的数据
- 使用SharedPreferences保存数据
- SharedPreferences 保存和读取对象
- ThinkPHP3.2.3如何实现系统登录日志?
- 触发器异常导致的druid问题
- Canvas
- dcm4che2-Java Library for DICOM
- Android系统底层启动源码分析(开机启动)
- 安卓中使用SharedPreferences保存javaBean类对象
- comet4j 主动向客户端推送信息 简单例子
- 【题目整理】
- OpenJudge百炼-2745-显示器-C语言-模拟
- Lua教程(5):C/C++操作Lua数组和字符串
- 重新认识自己
- Spring aop 通过获取代理对象实现事务切换
- HDU 6105 博弈 ? 都是思维
- JAVA类的初始化