工具类之SPUtils

作者: Blankj | 来源:发表于2016-09-14 09:55 被阅读3199次

    此工具类不是网上大家用烂的那一份,是博主亲自编写,亲自测试,代码简洁清晰,可满足日常开发,不再是采用效率低下的commit来提交,而是apply,至于两者有何不同,大家可以自行search。
    Talk is cheap, show me ur code.下面上方法列表和具体代码,开车喽,呜~~

    getInstance: 获取SP实例
    put        : SP中写入数据
    getString  : SP中读取String
    getInt     : SP中读取int
    getLong    : SP中读取long
    getFloat   : SP中读取float
    getBoolean : SP中读取boolean
    getAll     : SP中获取所有键值对
    remove     : SP中移除该key
    contains   : SP中是否存在该key
    clear      : SP中清除所有数据
    

    import android.content.Context;
    import android.content.SharedPreferences;
    import android.support.annotation.NonNull;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * <pre>
     *     author: Blankj
     *     blog  : http://blankj.com
     *     time  : 2016/08/02
     *     desc  : SP相关工具类
     * </pre>
     */
    public class SPUtils {
    
        private static Map<String, SPUtils> sSPMap = new HashMap<>();
        private SharedPreferences sp;
    
        /**
         * 获取SP实例
         *
         * @return {@link SPUtils}
         */
        public static SPUtils getInstance() {
            return getInstance("");
        }
    
        /**
         * 获取SP实例
         *
         * @param spName sp名
         * @return {@link SPUtils}
         */
        public static SPUtils getInstance(String spName) {
            if (isSpace(spName)) spName = "spUtils";
            SPUtils sp = sSPMap.get(spName);
            if (sp == null) {
                sp = new SPUtils(spName);
                sSPMap.put(spName, sp);
            }
            return sp;
        }
    
        private SPUtils(String spName) {
            sp = Utils.getContext().getSharedPreferences(spName, Context.MODE_PRIVATE);
        }
    
        /**
         * SP中写入String
         *
         * @param key   键
         * @param value 值
         */
        public void put(@NonNull String key, @NonNull String value) {
            sp.edit().putString(key, value).apply();
        }
    
        /**
         * SP中读取String
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值{@code null}
         */
        public String getString(@NonNull String key) {
            return getString(key, "");
        }
    
        /**
         * SP中读取String
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public String getString(@NonNull String key, @NonNull String defaultValue) {
            return sp.getString(key, defaultValue);
        }
    
        /**
         * SP中写入int
         *
         * @param key   键
         * @param value 值
         */
        public void put(@NonNull String key, int value) {
            sp.edit().putInt(key, value).apply();
        }
    
        /**
         * SP中读取int
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值-1
         */
        public int getInt(@NonNull String key) {
            return getInt(key, -1);
        }
    
        /**
         * SP中读取int
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public int getInt(@NonNull String key, int defaultValue) {
            return sp.getInt(key, defaultValue);
        }
    
        /**
         * SP中写入long
         *
         * @param key   键
         * @param value 值
         */
        public void put(@NonNull String key, long value) {
            sp.edit().putLong(key, value).apply();
        }
    
        /**
         * SP中读取long
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值-1
         */
        public long getLong(@NonNull String key) {
            return getLong(key, -1L);
        }
    
        /**
         * SP中读取long
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public long getLong(@NonNull String key, long defaultValue) {
            return sp.getLong(key, defaultValue);
        }
    
        /**
         * SP中写入float
         *
         * @param key   键
         * @param value 值
         */
        public void put(@NonNull String key, float value) {
            sp.edit().putFloat(key, value).apply();
        }
    
        /**
         * SP中读取float
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值-1
         */
        public float getFloat(@NonNull String key) {
            return getFloat(key, -1f);
        }
    
        /**
         * SP中读取float
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public float getFloat(@NonNull String key, float defaultValue) {
            return sp.getFloat(key, defaultValue);
        }
    
        /**
         * SP中写入boolean
         *
         * @param key   键
         * @param value 值
         */
        public void put(@NonNull String key, boolean value) {
            sp.edit().putBoolean(key, value).apply();
        }
    
        /**
         * SP中读取boolean
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值{@code false}
         */
        public boolean getBoolean(@NonNull String key) {
            return getBoolean(key, false);
        }
    
        /**
         * SP中读取boolean
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public boolean getBoolean(@NonNull String key, boolean defaultValue) {
            return sp.getBoolean(key, defaultValue);
        }
    
        /**
         * SP中写入String集合
         *
         * @param key    键
         * @param values 值
         */
        public void put(@NonNull String key, @NonNull Set<String> values) {
            sp.edit().putStringSet(key, values).apply();
        }
    
        /**
         * SP中读取StringSet
         *
         * @param key 键
         * @return 存在返回对应值,不存在返回默认值{@code null}
         */
        public Set<String> getStringSet(@NonNull String key) {
            return getStringSet(key, Collections.<String>emptySet());
        }
    
        /**
         * SP中读取StringSet
         *
         * @param key          键
         * @param defaultValue 默认值
         * @return 存在返回对应值,不存在返回默认值{@code defaultValue}
         */
        public Set<String> getStringSet(@NonNull String key, @NonNull Set<String> defaultValue) {
            return sp.getStringSet(key, defaultValue);
        }
    
        /**
         * SP中获取所有键值对
         *
         * @return Map对象
         */
        public Map<String, ?> getAll() {
            return sp.getAll();
        }
    
        /**
         * SP中移除该key
         *
         * @param key 键
         */
        public void remove(@NonNull String key) {
            sp.edit().remove(key).apply();
        }
    
        /**
         * SP中是否存在该key
         *
         * @param key 键
         * @return {@code true}: 存在<br>{@code false}: 不存在
         */
        public boolean contains(@NonNull String key) {
            return sp.contains(key);
        }
    
        /**
         * SP中清除所有数据
         */
        public void clear() {
            sp.edit().clear().apply();
        }
    
        private static boolean isSpace(String s) {
            if (s == null) return true;
            for (int i = 0, len = s.length(); i < len; ++i) {
                if (!Character.isWhitespace(s.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
    }
    

    如果该工具类依赖其他工具类,都可以在我的Android开发人员不得不收集的代码(持续更新中)中找到。

    相关文章

      网友评论

        本文标题:工具类之SPUtils

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