使用SharedPreference 进行对象存储

使用场景

在实际开发中,经常会需要将对象进行存储,通常的想法是使用数据库进存储,但是,在整个项目中只需要对少量数据进行存储时,这时使用数据库就显得有些重。比如登录成功后的用户信息,在整个项目中只有这一条数据需要存储,如果因为这一条数据的存储就使用数据库进行存储,是否显得有些大材小用了,其实,使用SharedPreference 对用户登录信息进行存储,也不为是一种不错的选择,如果此时考虑写入和读取效率问题,可以对数在内存中做一下数据持久化处理。

注意

存入的对象一定要进行序列化(Serializable),否则无法进行存储
比如存入User对象,就要对User 进行序列化操作。
示例代码如下:

public class User implements Serializable{
    private String name;
    private String addr;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

实现代码

对象存储
    /**
     * 向SharedPreference 中保存信息<br>
     *
     * @param key
     *            类型String Key
     * @param obj
     *            类型object
     */
    public void saveToShared(String key, Object obj) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ObjectOutputStream oout = new ObjectOutputStream(out);
            oout.writeObject(obj);
            String value = new String(Base64.encode(out.toByteArray()));
            Editor editor = sharedPreferences.edit();
            editor.putString(key,value);
            editor.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
对象读取
    /**
     * 从SharedPreference 中读取保存的信息<br>
     *
     * @param key
     *            读取保存信息的Key
     * @return 返回读取的信息<br>
     *         类型为 T <br>
     *         Value 为读取内容,类型为String,如果Key未找到对应的数据,则返回null
     */
    public Object queryForSharedToObject(String key) {

        String value = sharedPreferences.getString(key, null);
        if(value != null){
            byte[] valueBytes = Base64.decode(value);
            ByteArrayInputStream bin = new ByteArrayInputStream(valueBytes);
            try {
                ObjectInputStream oin = new ObjectInputStream(bin);

                return oin.readObject();
            } catch (Exception e) {
                return null;
            }
        }
        return null;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,041评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,532评论 18 399
  • 前文:理解FIO各项参数,为后续使用做准备经过:fio - flexible I/O testerFIO - 灵活...
    养猫的老鼠阅读 7,910评论 0 0
  • Type-C是USB接口的一种连接介面,不分正反两面均可插入,大小约为8.3mm×2.5mm,和其他介面一样支持U...
    小鱼向前阅读 5,258评论 0 0

友情链接更多精彩内容