SharedPreferences

简介

  1. sp可用来持久化存储键值对

  2. sp 的底层是由 xml 来实现的,操作 sp 的过程就是xml 的序列化和解析的过程. xml 是存储在磁盘上的,因此考虑到需要 I/O 速度问题,sp 不适宜频繁操作. 同时序列化 xml 是就是将内存中的数据写到xml 文件中,由于 dvm 的内存是很有限的,因此单个 sp 文件不建议太大,具体多大是没有具体要求,但是 DVM 堆内存也就 16M,因此数据大小肯定不能超过这个数字

  3. 其实 sp 设置的目的就是为了保存用户的偏好和配置信息的,因此不要保存太多的数据

封装好的工具类

  • SP_FILE_NAME 可替换值

  • TContext可替换为项目中的全局上下文(Application实例)

  • apply()和commit()均会立即更改内存中的sp对象,但apply()会将更新异步写入磁盘,而commit()是同步的,因此,应该避免在主线程调用commit()

    import android.content.Context;
    import android.content.SharedPreferences;
    
    import java.util.Map;
    import java.util.Set;
    
    
    public class TSP {
    
        private static final String SP_FILE_NAME = "default_config";    // SharedPreferences文件名
        private static SharedPreferences mSP;
    
    
        /**
         * 单例
         */
        private static final class Holder {
            private static final TSP instance = new TSP();
        }
    
        public static TSP getInstance() {
            return Holder.instance;
        }
    
        private TSP() {
            if (null != mSP) return;
            mSP = TContext.getContext().getSharedPreferences(SP_FILE_NAME, Context.MODE_PRIVATE);
        }
    
    
        /**
         * set/get各类型的值
         */
        public void setString(String key, String value) {
            mSP.edit().putString(key, value).apply();
        }
    
        public String getString(String key, String defaultValue) {
            return mSP.getString(key, defaultValue);
        }
    
        public String getString(String key) {
            return getString(key, "");
        }
    
    
        public void setBoolean(String key, boolean value) {
            mSP.edit().putBoolean(key, value).apply();
        }
    
        public boolean getBoolean(String key, boolean defaultValue) {
            return mSP.getBoolean(key, defaultValue);
        }
    
        public boolean getBoolean(String key) {
            return getBoolean(key, false);
        }
    
    
        public void setInt(String key, int value) {
            mSP.edit().putInt(key, value).apply();
        }
    
        public int getInt(String key, int defaultValue) {
            return mSP.getInt(key, defaultValue);
        }
    
        public int getInt(String key) {
            return getInt(key, 0);
        }
    
    
        public void setLong(String key, long value) {
            mSP.edit().putLong(key, value).apply();
        }
    
        public long getLong(String key, long defaultValue) {
            return mSP.getLong(key, defaultValue);
        }
    
        public long getLong(String key) {
            return getLong(key, 0);
        }
    
    
        public void setFloat(String key, float value) {
            mSP.edit().putFloat(key, value).apply();
        }
    
        public float getFloat(String key, float defaultValue) {
            return mSP.getFloat(key, defaultValue);
        }
    
        public float getFloat(String key) {
            return getFloat(key, 0);
        }
    
    
        public void setStrSet(String key, Set<String> strs) {
            mSP.edit().putStringSet(key, strs).apply();
        }
    
        public Set<String> getStrSet(String key, Set<String> defaultValue) {
            return mSP.getStringSet(key, defaultValue);
        }
    
        public Set<String> getStrSet(String key) {
            return getStrSet(key, null);
        }
    
    
        /**
         * 某key是否存在
         */
        public boolean containsKey(String key) {
            return mSP.contains(key);
        }
    
    
        /**
         * 清除某key键值对
         */
        public void removeAt(String key) {
            mSP.edit().remove(key).apply();
        }
    
    
        /**
         * 清除所有键值对
         */
        public void clearAll() {
            mSP.edit().clear().apply();
        }
    
    
        /**
         * 获取所有键值对
         */
        public Map<String, ?> getAll() {
            return mSP.getAll();
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值