SharedPreferencesキャッシュツールクラスSPUtil

9037 ワード

1.supportパッケージのSharedPreferencesCompatを使用する.apply()メソッドはデータを格納し、apply()の低バージョンsdk互換性の問題を解決します.
2.SharedPreferencesファイル名を変更するだけで、ユーザー向けストレージをサポート
public class SPUtil {

    public static final String KEY_USER_HOBBY_DIALOG = "key_user_hobby_dialog";//       

    // @Retention     
    //      
    @StringDef({KEY_USER_HOBBY_DIALOG,})
    @Retention(RetentionPolicy.SOURCE)
    public @interface SPKey {
    }


    private static final String USER_SP_PREFIX = "SP_USER_";
    public static String userTemp = "userTemp";


    /**
     *    SharedPreferences
     *
     * @param inUserSP        
     * @return SharedPreferences
     */
    private static SharedPreferences getSharedPreferences(boolean inUserSP) {
        SharedPreferences sharedPreferences;
        if (inUserSP) {
            String name = USER_SP_PREFIX + userTemp;
            sharedPreferences = AppContext.getInstance().getApplicationContext().getSharedPreferences(name, Context.MODE_PRIVATE);
        } else {
            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(AppContext.getInstance().getApplicationContext());
        }
        return sharedPreferences;
    }


    /**
     *        ,               ,               
     *
     * @param key    key
     * @param object value
     */

    public static void putDefaultSP(@SPKey String key, Object object) {
        put(false, key, object);
    }

    /**
     *        ,               ,               
     *
     * @param key    key
     * @param object value
     */
    @SuppressLint("CommitPrefEdits")
    public static void putUserSP(@SPKey String key, Object object) {
        put(true, key, object);
    }

    /**
     *        ,               ,               
     *
     * @param inUserSP             SharedPreferences
     * @param key      key
     * @param object   value
     */
    @SuppressLint("CommitPrefEdits")
    private static void put(boolean inUserSP, @SPKey String key, Object object) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        SharedPreferences.Editor editor = sp.edit();

        if (object instanceof String) {
            editor.putString(key, (String) object);
        } else if (object instanceof Integer) {
            editor.putInt(key, (Integer) object);
        } else if (object instanceof Boolean) {
            editor.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float) {
            editor.putFloat(key, (Float) object);
        } else if (object instanceof Long) {
            editor.putLong(key, (Long) object);
        } else {
            editor.putString(key, object.toString());
        }
        SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
    }


    public static Object getFromDefaultSP(@SPKey String key, Object defaultObject) {
        return get(false, key, defaultObject);
    }

    public static Object getFromUserSP(@SPKey String key, Object defaultObject) {
        return get(true, key, defaultObject);
    }

    /**
     *          ,                   ,             
     *
     * @param inUserSP                SharedPreferences    
     * @param key           key
     * @param defaultObject defaultObject
     * @return Object
     */
    private static Object get(boolean inUserSP, @SPKey String key, Object defaultObject) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        if (defaultObject instanceof String) {
            return sp.getString(key, (String) defaultObject);
        } else if (defaultObject instanceof Integer) {
            return sp.getInt(key, (Integer) defaultObject);
        } else if (defaultObject instanceof Boolean) {
            return sp.getBoolean(key, (Boolean) defaultObject);
        } else if (defaultObject instanceof Float) {
            return sp.getFloat(key, (Float) defaultObject);
        } else if (defaultObject instanceof Long) {
            return sp.getLong(key, (Long) defaultObject);
        }
        return null;
    }

    public static String getFromDefaultSP(@SPKey String key, String defValue) {
        return get(false, key, defValue);
    }

    public static String getFromUserSP(@SPKey String key, String defValue) {
        return get(true, key, defValue);
    }

    private static String get(boolean inUserSP, @SPKey String key, String defValue) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getString(key, defValue);
    }


    /*****************************  boolean  begin***************************/
    public static boolean getFromDefaultSP(@SPKey String key, boolean defValue) {
        return get(false, key, defValue);
    }

    public static boolean getFromUserSP(@SPKey String key, boolean defValue) {
        return get(true, key, defValue);
    }

    private static boolean get(boolean inUserSP, @SPKey String key, boolean defValue) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getBoolean(key, defValue);
    }
    /*****************************  boolean  end***************************/


    /*****************************  int  begin***************************/
    public static int getFromDefaultSP(@SPKey String key, int defValue) {
        return get(false, key, defValue);
    }

    public static int getFromUserSP(@SPKey String key, int defValue) {
        return get(true, key, defValue);
    }

    private static int get(boolean inUserSP, @SPKey String key, int defValue) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getInt(key, defValue);
    }
    /*****************************  int  end***************************/


    /*****************************  float  begin***************************/
    public static float getFromDefaultSP(String key, float defValue) {
        return  get(false, key, defValue);
    }

    public static float getFromUserSP(@SPKey String key, float defValue) {
        return get(true, key, defValue);
    }

    private static float get(boolean inUserSP, @SPKey String key, float defValue) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getFloat(key, defValue);
    }
    /*****************************  float  end***************************/


    /*****************************  long  begin***************************/
    public static long getFromDefaultSP(@SPKey String key, long defValue) {
        return get(false, key, defValue);
    }

    public static long getFromUserSP(@SPKey String key, long defValue) {
        return get(true, key, defValue);
    }

    private static long get(boolean inUserSP, @SPKey String key, long defValue) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getLong(key, defValue);
    }
    /*****************************  long  begin***************************/



    public static void removeFromDefaultSP(@SPKey String key) {
        remove(false, key);
    }

    public static void removeFromUserSP(@SPKey String key) {
        remove(true, key);
    }


    /**
     *     key       
     *
     * @param inUserSP inUserSP
     * @param key      key
     */
    @SuppressLint("CommitPrefEdits")
    private static void remove(boolean inUserSP, @SPKey String key) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        SharedPreferences.Editor editor = sp.edit();
        editor.remove(key);
        SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
    }


    public static void clearDefaultSP() {
        clear(false);
    }

    public static void clearUserSP() {
        clear(true);
    }

    /**
     *       
     *
     * @param inUserSP inUserSPSP
     */
    @SuppressLint("CommitPrefEdits")
    private static void clear(boolean inUserSP) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        SharedPreferencesCompat.EditorCompat.getInstance().apply(editor);
    }

    public static boolean containsInDefaultSP(@SPKey String key) {
        return contains(false, key);
    }

    public static boolean containsInUserSP(@SPKey String key) {
        return contains(true, key);
    }

    /**
     *     key      
     *
     * @param inUserSP inUserSP
     * @param key      key
     * @return boolean
     */
    private static boolean contains(boolean inUserSP, @SPKey String key) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.contains(key);
    }

    public static Map getAllFromDefault() {
        return getAll(false);
    }

    public static Map getAllFromUser() {
        return getAll(true);
    }

    /**
     *         
     *
     * @param inUserSP inUserSP
     * @return Map
     */
    private static Map getAll(boolean inUserSP) {
        SharedPreferences sp = getSharedPreferences(inUserSP);
        return sp.getAll();
    }
}