SharePreferencesHelper 工具类

作者: super小立立 | 来源:发表于2017-12-14 15:37 被阅读0次

    SharePreferencesHelper

    关于 SharedPreferences 的 commit 和apply 的关 系:

    相同点:

    • 1.都是将键值对数据保存到指定的 xm 文件里面去.

    区别:

      1. 提交数据的区别

        commit 是同步提交数据:
            当有多个数据一起提交的时候,只有当前一个数据保存成功之后才会进行下一个.
         
        apply 首先将数据保存在内存里面, 
             当有数据被覆盖的时候直接会在内存里面覆盖掉,然后才会保存到硬盘里面去, 相对而言,apply 更快速一些
        
      1. 函数的返回值

        
        commit 有是否成功返回值 , 当有需要使用到这个返回值来确认数据的完整性的时候这个地方可以直接使用到
        
        apply 是直接void 的返回值,
        
        
      1. 但是大部分时候我们都不关系保存数据的返回. 所以大多时候我们完全可以使用 apply() 函数提交数据
    //首选项帮助类, 提供了保存和获取首选项的功能.
    public class SharePreferencesHelper {
    
        private static SimpleArrayMap<String, SharePreferencesHelper> spArray = new SimpleArrayMap<String, SharePreferencesHelper>();
        private static SharedPreferences sp;
    
        public static SharePreferencesHelper getInstance(Context context) {
            return getInstance(context, "");
        }
    
        public static SharePreferencesHelper getInstance(Context context, String spName) {
            if (TextUtils.isEmpty(spName)) spName = "default_spUtil";
            SharePreferencesHelper spUtil = spArray.get(spName);
            if (spUtil == null) {
                spUtil = new SharePreferencesHelper(context, spName);
                spArray.put(spName, spUtil);
            }
            return spUtil;
        }
    
        private SharePreferencesHelper(Context context, String spName) {
            sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
        }
    
        public  void putString(@NonNull String key, Object value) {
            applyValue(key, value);
        }
    
        public  void putBoolean(@NonNull String key, Object value) {
            applyValue(key, value);
        }
    
        public  void putInt(@NonNull String key, Object value) {
            applyValue(key, value);
        }
    
        public  void putObject(@NonNull String key, Object value) {
            applyValue(key, value);
        }
    
        public  boolean syncPutString(@NonNull String key, Object value) {
            return commitValue(key, value);
        }
    
        public  boolean syncPutBoolean(@NonNull String key, Object value) {
            return commitValue(key, value);
        }
    
        public  boolean syncPutInt(@NonNull String key, Object value) {
            return commitValue(key, value);
        }
    
        public  boolean syncPutObject(@NonNull String key, Object value) {
            return commitValue(key, value);
        }
    
        
        public String getString(@NonNull final String key) {
            return getString(key, "");
        }
    
    
        public String getString(@NonNull final String key, @NonNull final String defaultValue) {
            return sp.getString(key, defaultValue);
        }
    
        public int getInteger(@NonNull final String key, final int defaultValue) {
            return sp.getInt(key, defaultValue);
        }
    
        public Boolean getBoolean(@NonNull final String key) {
            return sp.getBoolean(key, false);
        }
    
        private  boolean commitValue(@NonNull String key, Object value) {
            SharedPreferences.Editor editor = saveData(key, value);
            //断言, 当值 true 的时候才会向下执行.
            assert editor != null;
            return editor.commit();
        }
    
        private  void applyValue(@NonNull String key, Object value) {
            SharedPreferences.Editor editor = saveData(key, value);
            //断言, 当值为 true 的时候才会向下执行.
            assert editor != null;
            editor.apply();
        }
    
        public  boolean containKey(@NonNull String key) {
            return sp.contains(key);
        }
    
        public  void clearAll(){
            sp.edit().clear().apply();
        }
    
        public  void removeForKey(@NonNull final String key) {
            sp.edit().remove(key).apply();
        }
    
        private  SharedPreferences.Editor saveData(String key, Object value) {
            SharedPreferences.Editor edit;
            if (value != null) {
                edit = sp.edit();
                if (value instanceof String) {
                    edit.putString(key, (String) value);
                } else if (value instanceof Boolean) {
                    edit.putBoolean(key, (Boolean) value);
                } else if (value instanceof Integer) {
                    edit.putInt(key, (Integer) value);
                } else {
                    edit.putString(key, String.valueOf(value));
                }
                return edit;
            }
            return null;
        }
    
    }
    

    相关文章

      网友评论

        本文标题:SharePreferencesHelper 工具类

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