美文网首页
使用SharedPreference 进行对象存储

使用SharedPreference 进行对象存储

作者: mm_cuckoo | 来源:发表于2017-07-07 13:39 被阅读16次

    使用场景

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

    相关文章

      网友评论

          本文标题:使用SharedPreference 进行对象存储

          本文链接:https://www.haomeiwen.com/subject/muilhxtx.html