博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android本地化全局对象的实践(2)——SharePreferences
阅读量:5837 次
发布时间:2019-06-18

本文共 3980 字,大约阅读时间需要 13 分钟。

个人博客 ,最新文章将会首发,欢迎探索哦 !

同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。

上一篇讲到了使用File的方式来本地化全局对象,它适合体量较大的全局对象。对于一些体量较小的全局,并且对安全性有要求的对象,可以使用SharePreference来进行对像的本地化。

注意,这种方式适合较小的对象,较大的对象还是应该选用File的方式。

使用实例

//全局对象和上一篇中一样public class User implements Serializable, Cloneable {  public static final long serialVersionUID = 1L;  private int userId;  private String userNikeName;  private String userRealName;  private int userLevel;  private int vipLevel;  public User() {  }  public User(int userId, String userNikeName, String userRealName, int userLevel, int vipLevel) {    this.userId = userId;    this.userNikeName = userNikeName;    this.userRealName = userRealName;    this.userLevel = userLevel;    this.vipLevel = vipLevel;  }  public int getUserId() {    return userId;  }  public void setUserId(int userId) {    this.userId = userId;  }  public String getUserNikeName() {    return userNikeName;  }  public void setUserNikeName(String userNikeName) {    this.userNikeName = userNikeName;  }  public String getUserRealName() {    return userRealName;  }  public void setUserRealName(String userRealName) {    this.userRealName = userRealName;  }  public int getUserLevel() {    return userLevel;  }  public void setUserLevel(int userLevel) {    this.userLevel = userLevel;  }  public int getVipLevel() {    return vipLevel;  }  public void setVipLevel(int vipLevel) {    this.vipLevel = vipLevel;  }  protected User(Parcel in) {    this.userId = in.readInt();    this.userNikeName = in.readString();    this.userRealName = in.readString();    this.userLevel = in.readInt();    this.vipLevel = in.readInt();  }}//下面两个方法实现了Object对象和编码方式为Base64的字符串的互相转换public static final String ObjectToBase64String(Object object) throws IOException {    ByteArrayOutputStream baos = new ByteArrayOutputStream();    ObjectOutputStream oos = new ObjectOutputStream(baos);    oos.writeObject(object);    String base64String = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); //采用Base64编码方式编码对象生成的字节数组为字符串    if (oos != null){      oos.close();    }    if (baos != null){      baos.close();    }    return base64String;  }  public static final 
T Base64StringToObject(String base64String, Class
clazz) throws IOException, ClassNotFoundException { byte[] bytes = Base64.decode(base64String, Base64.DEFAULT); //解码 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); T t = (T) ois.readObject(); if (ois != null) { ois.close(); } if (bais != null) { bais.close(); } return t; } //下面两个方法是进行存取的public class SharePreferencesUtils { public static final void saveObject(@NonNull Context context, String key, @NonNull Object object) throws IOException { SharedPreferences sp = context.getSharedPreferences(key, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); String base64String = AppUtils.ObjectToBase64String(object); editor.putString(key, base64String); editor.commit(); } public static final
T restoreObject(@NonNull Context context, String key, Class
clazz) throws IOException, ClassNotFoundException { SharedPreferences sp = context.getSharedPreferences(key, Context.MODE_PRIVATE); String base64String = sp.getString(key, ""); T t = null; if (!base64String.equals("")){ t = AppUtils.Base64StringToObject(base64String, clazz); } return t; }}//现在就可以开始使用啦private void saveUserToSP(User user){ try { SharePreferencesUtils.saveObject(this, AppConstant.USER_KEY,user); } catch (IOException e) { e.printStackTrace(); } } private User restoreUserFromSP(){ User user = null; try { user = SharePreferencesUtils.restoreObject(this,AppConstant.USER_KEY,User.class); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } return user; }
img_08b056b059ac831a2d371fa29bdef1e3.jpe
CoorChice的公众号

转载地址:http://iyncx.baihongyu.com/

你可能感兴趣的文章
Java annotation 自定义注释@interface的用法
查看>>
Apache Spark 章节1
查看>>
Linux crontab定时执行任务
查看>>
mysql root密码重置
查看>>
33蛇形填数
查看>>
选择排序
查看>>
SQL Server 数据库的数据和日志空间信息
查看>>
前端基础之JavaScript
查看>>
自己动手做个智能小车(6)
查看>>
自己遇到的,曾未知道的知识点
查看>>
P1382 楼房 set用法小结
查看>>
分类器性能度量
查看>>
docker 基础
查看>>
写一个bat文件,删除文件名符合特定规则,且更改日期在某
查看>>
我的友情链接
查看>>
写Use Case的一种方式,从oracle的tutorial抄来的
查看>>
【C#】protected 变量类型
查看>>
Ubuntu解压
查看>>
爬虫_房多多(设置随机数反爬)
查看>>
藏地密码
查看>>