SharedPreferenceUtils.java 6.39 KB
package com.cnlive.goldenline.util;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;

import com.cnlive.goldenline.application.GoldenLineApplication;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SharedPreferenceUtils {
    private Context sContext = null;
    private static String sSharedName;
    private static final String SETTING_NAME = "setting";

    private static SharedPreferenceUtils preferenceUtils;
    private SharedPreferences sharedPreferences = null;

    private SharedPreferenceUtils(Context context) {

        if(context instanceof Activity){
            sContext = ((Activity) context).getApplication();
        }else {
            sContext = context;
        }
        getSharedPreference();
    }

    private SharedPreferences getSharedPreference(){
        if (sSharedName != null) {
            sharedPreferences = sContext.getSharedPreferences(sSharedName, Context.MODE_PRIVATE);
            sSharedName = null;
        }
        return sharedPreferences;
    }


    /**
     * 实例SharedPreferenceUtils
     * @return {@link SharedPreferenceUtils}
     */
    public static SharedPreferenceUtils getInstance() {
        return SharedPreferenceUtils.getInstance(SharedPreferenceUtils.SETTING_NAME);
    }

    /**
     * 实例SharedPreferenceUtils
     * @param sharedName : SharedPreference 名字 type {@link String}
     * @return {@link SharedPreferenceUtils}
     */
    public static SharedPreferenceUtils getInstance(String sharedName) {
        return SharedPreferenceUtils.getInstance(GoldenLineApplication.getInstance().getApplicationContext(),sharedName);
    }

    /**
     * 实例SharedPreferenceUtils
     * @param context : 上下文 Context {@link Context}
     * @param sharedName :SharedPreference 名字 type {@link String}
     * @return {@link SharedPreferenceUtils}
     */
    public static SharedPreferenceUtils getInstance(Context context, String sharedName) {

        if(sSharedName == null || !sSharedName.equals(sharedName)){
            sSharedName = sharedName;
            preferenceUtils = new SharedPreferenceUtils(context);
        }
        return preferenceUtils;
    }


    /**
     * 获取 {@link SharedPreferences } ,在调用该方法时,必须先调用{@link #getInstance}方法获取一个实例对象
     * @return {@link SharedPreferences }
     */
    public SharedPreferences getSharedPreferences(){
        return sharedPreferences;
    }

    /**
     * 向SharedPreference 中保存信息<br>
     *
     * @param dataMapping
     *            要保存信息的 Key-Value , 类型为Map,key:String,Value:String
     */
    public void saveToShared(Map<String, String> dataMapping) {

        SharedPreferences.Editor editor = sharedPreferences.edit();
        for (String key : dataMapping.keySet()) {
            String value = dataMapping.get(key);
            editor.putString(key, value);
        }
        editor.commit();
    }

    /**
     * 向SharedPreference 中保存信息<br>
     *
     * @param key
     *            类型String Key
     * @param value
     *            类型String value
     */
    public void saveToShared(String key, String value) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    /**
     * 向SharedPreference 中保存信息<br>
     *
     * @param key
     *            类型String Key
     * @param value
     *            类型boolean value
     */
    public void saveToShared(String key, boolean value) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, value);
        editor.commit();
    }


    /**
     * 向SharedPreference 中保存信息<br>
     *
     * @param key
     *            类型String Key
     * @param value
     *            类型int value
     */
    public void saveToShared(String key, int value) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt(key, value);
        editor.commit();
    }



    /**
     * 从SharedPreference 中读取保存的信息<br>
     *
     * @param dataNames
     *            读取保存信息的Key 集合,类型为List ,Key: String
     * @return 返回读取的信息<br>
     *         类型为Map<br>
     *         Key对应查询List 中的key,类型为String <br>
     *         Value 为读取内容,类型为String,如果Key未找到对应的数据,则返回null
     */
    public Map<String, String> queryForShared(List<String> dataNames) {

        Map<String, String> dataMapping = new HashMap<String, String>();
        for (String key : dataNames) {
            String vlaue = sharedPreferences.getString(key, null);
            dataMapping.put(key, vlaue);
        }
        return dataMapping;
    }

    /**
     * 从SharedPreference 中读取保存的信息<br>
     *
     * @param keyMes
     *            读取保存信息的Key
     * @return 返回读取的信息<br>
     *         类型为String<br>
     *         Value 为读取内容,类型为String,如果Key未找到对应的数据,则返回null
     */
    public String queryForSharedToString(String keyMes) {
        return sharedPreferences.getString(keyMes, null);
    }

    /**
     * 从SharedPreference 中读取保存的信息<br>
     *
     * @param keyMes
     *            读取保存信息的Key
     * @return 返回读取的信息 <br>
     *         类型为 int <br>
     *         Value 为读取内容,类型为int,如果Key未找到对应的数据,则返回-1
     */
    public int queryForSharedToInt(String keyMes) {
        return sharedPreferences.getInt(keyMes, -1);
    }

    /**
     * 从SharedPreference 中读取保存的信息<br>
     *
     * @param keyMes
     *            读取保存信息的Key
     * @return 返回读取的信息<br>
     *         boolean<br>
     *         Value 为读取内容,类型为 boolean,如果Key未找到对应的数据,则返回 false
     */
    public boolean queryForSharedToBoolean(String keyMes) {
        return sharedPreferences.getBoolean(keyMes, false);
    }


    /**
     * 删除 对应key 上的value , 删除后的值为 null
     *
     * @param key
     *            对应的Key
     */
    public void removeMes(String key) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.remove(key);
        editor.apply();
    }
}