sharepreference 工具類utils

最常見的輕量本地保存了。鑑於相關的工具類太多了,我就廢話少說,不懂的自己去看看。

package com.flyaudio.flycodelibrary.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.v4.util.SimpleArrayMap;

import java.util.Collections;
import java.util.Map;
import java.util.Set;

/**
 * @className SPUtils
 * @createDate 2018/11/6 18:17
 * @author xingyunye
 * @email [email protected]
 * @desc SharePref工具
 *
 */
@SuppressLint("ApplySharedPref")
public final class SPUtils {
    /**
     * 因爲一個SharePre文件對應一個SPUtils工具實例,所以用一個容器保存所有SPUtils
     */
    private static final SimpleArrayMap<String, SPUtils> SP_UTILS_MAP = new SimpleArrayMap<>();
    /**
     * 默認的SP名
     */
    private static final String DEFAULT_SP_NAME = "flyaudio";
    /**
     * SharedPreferences 實例
     */
    private SharedPreferences sp;

    /**
     * 獲取文件名爲默認名的SP工具單例,mode默認爲MODE_PRIVATE
     * @return SP工具單例
     */
    public static SPUtils getInstance() {
        return getInstance(DEFAULT_SP_NAME, Context.MODE_PRIVATE);
    }

    /**
     * 獲取文件名爲默認名的SP工具單例
     * @param mode 模式
     * @return SP工具單例
     */
    public static SPUtils getInstance(final int mode) {
        return getInstance(DEFAULT_SP_NAME, mode);
    }

    /**
     * 獲取指定文件名的SP工具單例
     * @param spName sp文件名
     * @return SP工具單例
     */
    public static SPUtils getInstance(@NonNull String spName) {
        return getInstance(spName, Context.MODE_PRIVATE);
    }

    /**
     * 獲取指定文件名,指定模式的SP工具單例
     * @param spName sp文件名
     * @param mode 模式
     * @return SP工具單例
     */
    public static SPUtils getInstance(@NonNull String spName, final int mode) {
        if (isSpace(spName)) {
            spName = DEFAULT_SP_NAME;
        }
        SPUtils spUtils = SP_UTILS_MAP.get(spName);
        if (spUtils == null) {
            spUtils = new SPUtils(spName, mode);
            SP_UTILS_MAP.put(spName, spUtils);
        }
        return spUtils;
    }

    /**
     * 構造私有
     * @param spName sp文件名
     */
    private SPUtils(final String spName) {
        sp = AppUtils.getApp().getSharedPreferences(spName, Context.MODE_PRIVATE);
    }

    /**
     * 構造私有
     * @param spName sp文件名
     * @param mode 模式
     */
    private SPUtils(final String spName, final int mode) {
        sp = AppUtils.getApp().getSharedPreferences(spName, mode);
    }

    /**
     * 放字符串值,(沒有commit)
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final String value) {
        sp.edit().putString(key, value).commit();
    }

    /**
     * 獲取鍵值
     *
     * @param key 鍵名
     * @return 鍵值,如果未獲取則返回空字串
     */
    public String getString(@NonNull final String key) {
        return getString(key, "");
    }

    /**
     * 獲取string鍵值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return 鍵值,如果未獲取則返回defaultValue
     */
    public String getString(@NonNull final String key, final String defaultValue) {
        return sp.getString(key, defaultValue);
    }

    /**
     * 放int值
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final int value) {
        sp.edit().putInt(key, value).commit();
    }


    /**
     * 獲取int鍵值
     *
     * @param key 鍵名
     * @return 鍵值,獲取失敗則返回-1
     */
    public int getInt(@NonNull final String key) {
        return getInt(key, -1);
    }

    /**
     * 獲取int鍵值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return int鍵值,如果未獲取則返回defaultValue
     */
    public int getInt(@NonNull final String key, final int defaultValue) {
        return sp.getInt(key, defaultValue);
    }

    /**
     * 放long鍵值
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final long value) {
        sp.edit().putLong(key, value).commit();
    }


    /**
     * 獲取long鍵值
     *
     * @param key 鍵名
     * @return 鍵值,獲取失敗則返回-a
     */
    public long getLong(@NonNull final String key) {
        return getLong(key, -1L);
    }

    /**
     * 獲取long鍵值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return 鍵值,獲取失敗則返回defaultValue
     */
    public long getLong(@NonNull final String key, final long defaultValue) {
        return sp.getLong(key, defaultValue);
    }

    /**
     * 放float鍵值
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final float value) {
        sp.edit().putFloat(key, value).commit();
    }


    /**
     * 返回float鍵值
     *
     * @param key 鍵名
     * @return 鍵值,獲取失敗則返回-a
     */
    public float getFloat(@NonNull final String key) {
        return getFloat(key, -1f);
    }

    /**
     * 返回float鍵值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return 鍵值,獲取失敗則返回defaultValue
     */
    public float getFloat(@NonNull final String key, final float defaultValue) {
        return sp.getFloat(key, defaultValue);
    }

    /**
     * 放boolean鍵值
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final boolean value) {
        sp.edit().putBoolean(key, value).commit();
    }


    /**
     * 獲取float鍵值
     *
     * @param key 鍵名
     * @return 鍵值,獲取失敗則返回false
     */
    public boolean getBoolean(@NonNull final String key) {
        return getBoolean(key, false);
    }

    /**
     * 獲取float鍵值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return 鍵值,獲取失敗則返回defaultValue
     */
    public boolean getBoolean(@NonNull final String key, final boolean defaultValue) {
        return sp.getBoolean(key, defaultValue);
    }

    /**
     * 放Set<String>值
     *
     * @param key   鍵名
     * @param value 鍵值
     */
    public void put(@NonNull final String key, final Set<String> value) {
        sp.edit().putStringSet(key, value).commit();
    }


    /**
     * 返回Set<String>值
     *
     * @param key 鍵名
     * @return string集合值,獲取失敗則返回一個空set
     */
    public Set<String> getStringSet(@NonNull final String key) {
        return getStringSet(key, Collections.<String>emptySet());
    }

    /**
     * 返回Set<String>值
     *
     * @param key          鍵名
     * @param defaultValue 默認值
     * @return string集合值,獲取失敗則返回defaultValue
     */
    public Set<String> getStringSet(@NonNull final String key,
                                    final Set<String> defaultValue) {
        return sp.getStringSet(key, defaultValue);
    }

    /**
     * 獲取所有的鍵值對,以map形式
     *
     * @return 所有的鍵值對
     */
    public Map<String, ?> getAll() {
        return sp.getAll();
    }

    /**
     * 是否含有指定的鍵值對
     *
     * @param key 鍵名
     * @return {@code true}: 是 <br>{@code false}: 否
     */
    public boolean contains(@NonNull final String key) {
        return sp.contains(key);
    }

    /**
     * 移除指定鍵值對
     *
     * @param key 鍵名
     */
    public void remove(@NonNull final String key) {
        sp.edit().remove(key).commit();
    }

    /**
     * 清空所有的鍵值對
     */
    public void clear() {
        sp.edit().clear().commit();
    }

    /**
     * 是否爲空格
     * @param s
     * @return
     */
    private static boolean isSpace(final 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;
    }
}

默認值記得修改一下。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章