SharedPreference的工具类,方便保存和读取数据

我们平常保存一些数据,都会用到SharedPreferences,但是对它操作会有点麻烦,所以这里写了一个工具类SharedPreferencesHelper,代码如下,采用单例模式进行封装:

[java]  view plain  copy
  1. public class SharedPreferencesHelper {  
  2.     private static final String FILE_NAME = "app_data";  
  3.     private static SharedPreferences mSharedPreferences;// 单例  
  4.     private static SharedPreferencesHelper instance;// 单例  
  5.   
  6.     private SharedPreferencesHelper(Context context) {  
  7.         mSharedPreferences = context.getSharedPreferences(FILE_NAME,  
  8.                 Context.MODE_PRIVATE);  
  9.     }  
  10.     /** 
  11.      * 初始化单例 
  12.      * @param context 
  13.      */  
  14.     public static synchronized void init(Context context) {  
  15.         if (instance == null) {  
  16.             instance = new SharedPreferencesHelper(context);  
  17.         }  
  18.     }  
  19.   
  20.     /** 
  21.      * 获取单例 
  22.      *  
  23.      * @return 
  24.      */  
  25.     public static SharedPreferencesHelper getInstance() {  
  26.         if (instance == null) {  
  27.             throw new RuntimeException("class should init!");  
  28.         }  
  29.         return instance;  
  30.     }  
  31.   
  32.     /** 
  33.      * 保存数据 
  34.      *  
  35.      * @param key 
  36.      * @param data 
  37.      */  
  38.     public void saveData(String key, Object data) {  
  39.         String type = data.getClass().getSimpleName();  
  40.   
  41.         Editor editor = mSharedPreferences.edit();  
  42.   
  43.         if ("Integer".equals(type)) {  
  44.             editor.putInt(key, (Integer) data);  
  45.         } else if ("Boolean".equals(type)) {  
  46.             editor.putBoolean(key, (Boolean) data);  
  47.         } else if ("String".equals(type)) {  
  48.             editor.putString(key, (String) data);  
  49.         } else if ("Float".equals(type)) {  
  50.             editor.putFloat(key, (Float) data);  
  51.         } else if ("Long".equals(type)) {  
  52.             editor.putLong(key, (Long) data);  
  53.         }  
  54.   
  55.         editor.commit();  
  56.     }  
  57.   
  58.     /** 
  59.      * 得到数据 
  60.      *  
  61.      * @param key 
  62.      * @param defValue 
  63.      * @return 
  64.      */  
  65.     public Object getData(String key, Object defValue) {  
  66.   
  67.         String type = defValue.getClass().getSimpleName();  
  68.         if ("Integer".equals(type)) {  
  69.             return mSharedPreferences.getInt(key, (Integer) defValue);  
  70.         } else if ("Boolean".equals(type)) {  
  71.             return mSharedPreferences.getBoolean(key, (Boolean) defValue);  
  72.         } else if ("String".equals(type)) {  
  73.             return mSharedPreferences.getString(key, (String) defValue);  
  74.         } else if ("Float".equals(type)) {  
  75.             return mSharedPreferences.getFloat(key, (Float) defValue);  
  76.         } else if ("Long".equals(type)) {  
  77.             return mSharedPreferences.getLong(key, (Long) defValue);  
  78.         }  
  79.   
  80.         return null;  
  81.     }  

调用方式如下

1、初始化:SharedPreferencesHelper.init(getApplicationContext());  一般放在自己的Application的onCreate方法里面执行,保证全局初始化。

2、调用saveData和getData进行数据的存储和读取。


通过以上两步就能实现对SharedPreferences的操作,是不是很方便!当然,因为存储和读取的时候需要知道键,所以可以根据我们的需求对其进行进一步封装,如下AppData类所示:

[java]  view plain  copy
  1. public class AppData {  
  2.     private String KEY_SETTING_NOTIFICATION = "key_setting_notification";  
  3.     private String KEY_SETTING_SOUND = "key_setting_sound";  
  4.     private String KEY_SETTING_VIBRATE = "key_setting_vibrate";  
  5.     private String KEY_SETTING_TESTENV = "key_setting_testenv";  
  6.         //在这里进行扩展,加入键,然后自动生成getter和setter函数,就达到了扩展的目的  
  7.     public AppData(Context context) {  
  8.         SharedPreferencesHelper.init(context);  
  9.     }  
  10.   
  11.     public void setSettingNotification(boolean bFlag) {  
  12.         SharedPreferencesHelper.getInstance().saveData(  
  13.                 KEY_SETTING_NOTIFICATION, bFlag);  
  14.     }  
  15.   
  16.     public boolean getSettingNotification() {  
  17.         return (Boolean) SharedPreferencesHelper.getInstance().getData(  
  18.                 KEY_SETTING_NOTIFICATION, false);  
  19.     }  
  20.   
  21.     public void setSettingSound(boolean bFlag) {  
  22.   
  23.         SharedPreferencesHelper.getInstance()  
  24.                 .saveData(KEY_SETTING_SOUND, bFlag);  
  25.     }  
  26.   
  27.     public boolean getSettingSound() {  
  28.         return (Boolean) SharedPreferencesHelper.getInstance().getData(  
  29.                 KEY_SETTING_SOUND, false);  
  30.     }  
  31.   
  32.       
  33.     public void setSettingVibrate(boolean bFlag) {  
  34.   
  35.         SharedPreferencesHelper.getInstance().saveData(KEY_SETTING_VIBRATE,  
  36.                 bFlag);  
  37.     }  
  38.   
  39.     public boolean getSettingVibrate() {  
  40.         return (Boolean) SharedPreferencesHelper.getInstance().getData(  
  41.                 KEY_SETTING_VIBRATE, false);  
  42.     }  
  43.     public void setTestEnvSetting(boolean bFlag) {  
  44.         Log.d("imdata""set testenv:" + bFlag);  
  45.         SharedPreferencesHelper.getInstance().saveData(KEY_SETTING_TESTENV,  
  46.                 bFlag);  
  47.     }  
  48.   
  49.     public boolean getTestEnvSetting() {  
  50.         return (Boolean) SharedPreferencesHelper.getInstance().getData(  
  51.                 KEY_SETTING_TESTENV, false);  
  52.     }  

调用方法如下

1、在MyApplication里面定义AppData对象:private AppData imdata = new AppData(this);

2、定义相应的方法:

[java]  view plain  copy
  1. public boolean getSettingSound() {  
  2.         return imdata.getSettingSound();  
  3.     }  
  4.   
  5.     public void setSettingSound(boolean bFlag) {  
  6.         imdata.setSettingSound(bFlag);  
  7.     }  
3、调用方法: MyApplication.getInstance().setSettingSound(true);  这里MyApplication也是一个单例。

通过以上封装,就非常方便和易于扩展了^_^!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值