使用SharedPreference 进行对象存储

2017-07-07  本文已影响16人  mm_cuckoo

使用场景

在实际开发中,经常会需要将对象进行存储,通常的想法是使用数据库进存储,但是,在整个项目中只需要对少量数据进行存储时,这时使用数据库就显得有些重。比如登录成功后的用户信息,在整个项目中只有这一条数据需要存储,如果因为这一条数据的存储就使用数据库进行存储,是否显得有些大材小用了,其实,使用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;
    }
上一篇下一篇

猜你喜欢

热点阅读