SharedPreference:如何创建sharedPreference类

时间:2016-09-19 12:29:15

标签: android sharedpreferences

我正在学习android并试图找出共享偏好类的最佳方法。这是sharedPreference类的一个示例;

 public static final String MyPREFERENCES = "MyPrefs" ;
   public static final String Name = "nameKey";
   public static final String Phone = "phoneKey";
   public static final String Email = "emailKey";
   SharedPreferences sharedpreferences;

我试图把它变成类似这样的类。

package pesa.sharedpreferencedemo.Utils;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;

/**
 * Created by mpan0590 on 9/19/2016.
 */

public class SharedPreference {

        public static final String PREFS_NAME = "PESASEND_PREFS";
        public static final String PREFS_KEY = "AOP_PREFS_String";


        public SharedPreference() {
            super();
        }

        public void save(Context context, String text) {
            SharedPreferences settings;
            Editor editor;

            //settings = PreferenceManager.getDefaultSharedPreferences(context);
            settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); //1
            editor = settings.edit(); //2

            editor.putString(PREFS_KEY, text); //3

            editor.commit(); //4
        }

        public String getValue(Context context) {
            SharedPreferences settings;
            String text;

            //settings = PreferenceManager.getDefaultSharedPreferences(context);
            settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            text = settings.getString(PREFS_KEY, null);
            return text;
        }

        public void clearSharedPreference(Context context) {
            SharedPreferences settings;
            Editor editor;

            //settings = PreferenceManager.getDefaultSharedPreferences(context);
            settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            editor = settings.edit();

            editor.clear();
            editor.commit();
        }

        public void removeValue(Context context) {
            SharedPreferences settings;
            Editor editor;

            settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            editor = settings.edit();

            editor.remove(PREFS_KEY);
            editor.commit();
        }
}

有没有办法可以为上面的例子做同样的事情,我是这个共享偏好/ android的新手,它有点令人困惑。我基本上只想创建一个sharedpreference类,您可以在其中添加新值,编辑当前值并删除其他值。我在这里展示的代码不是我的,而是来自我在网上找到的教程。

2 个答案:

答案 0 :(得分:0)

你可以创建一个像这样的课程

public class SharedPrefManager {

    public static SharedPreferences getSharedPref(Context mContext) {
        SharedPreferences pref = mContext.getSharedPreferences(Constants.SETTINGS, Context.MODE_PRIVATE);

        return pref;
    }

    public static void setPrefVal(Context mContext, String key, String value) {
        if(key!=null){
        Editor edit = getSharedPref(mContext).edit();
        edit.putString(key, value);
        edit.commit();
        }
    }

    public static void setIntPrefVal(Context mContext, String key, int value) {
        if(key!=null){
            Editor edit = getSharedPref(mContext).edit();
            edit.putInt(key, value);
            edit.commit();
        }
    }

    public static void setLongPrefVal(Context mContext, String key, Long value) {
        if(key!=null){
            Editor edit = getSharedPref(mContext).edit();
            edit.putLong(key, value);
            edit.commit();
        }
    }

    public static void setBooleanPrefVal(Context mContext, String key, boolean value) {
        if(key!=null){
            Editor edit = getSharedPref(mContext).edit();
            edit.putBoolean(key, value);
            edit.commit();
        }
    }


    public static String getPrefVal(Context mContext, String key) {
        SharedPreferences pref = getSharedPref(mContext);
        String val = "";
        try {
            if (pref.contains(key))
                val = pref.getString(key, "");
            else
                val = "";
        }catch (Exception e){
            e.printStackTrace();
        }
        return val;
    }

    public static int getIntPrefVal(Context mContext, String key) {
        SharedPreferences pref = getSharedPref(mContext);
        int val = 0;
        try {
        if(pref.contains(key)) val = pref.getInt(key, 0);
        }catch (Exception e){
            e.printStackTrace();
        }
        return val;
    }

    public static Long getLongPrefVal(Context mContext, String key) {
        SharedPreferences pref = getSharedPref(mContext);
        Long val = null;
        try{
        if(pref.contains(key)) val = pref.getLong(key, 0);
    }catch (Exception e){
        e.printStackTrace();
    }
        return val;
    }

    public static boolean getBooleanPrefVal(Context mContext, String key) {
        SharedPreferences pref = getSharedPref(mContext);
        boolean val = false;
        try{
        if(pref.contains(key)) val = pref.getBoolean(key, false);

        }catch (Exception e){
            e.printStackTrace();
        }
        return val;
    }


    public static boolean containkey(Context mContext,String key)
    {
        SharedPreferences pref = getSharedPref(mContext);
        return pref.contains(key);
    } 

    public static void saveTestScreens(Context mContext, String key,
            String value) {
        Editor edit = getSharedPref(mContext).edit();
        edit.putString(key, value);
        edit.commit();
    }

    public static String getTestScreens(Context mContext, String key) {
        SharedPreferences pref = getSharedPref(mContext);
        String val = "";
        if (pref.contains(key))
            val = pref.getString(key, "");
        else
            val = "";
        return val;
    }
}

答案 1 :(得分:0)

很高兴看到您正在尝试在SharedPreferences上创建抽象层,它确实简化了整个代码库并使其更具可读性。但是,您可以尝试使用现有的库或代码库来避免重新发明轮子并调整代码重用原则,而不是自己编写每个实用程序层。只需专注于为您的应用程序编写核心业务逻辑。

您可以轻松使用github上的许多图书馆和要点。 TinyDB就是我碰巧使用的SharedPreferences抽象层之一,它到目前为止工作得非常好。如果您想要更高级的功能,请尝试在RxJava上搜索基于SharedPreferences的抽象层,我相信您会找到很多。