一、SharedPreferences 简介
SharedPreferences是Android的一个接口类,是Android 数据存储(保存内部)的一种方法。主要以*.xml的形式保存在Android /data/data/com.***包名/shared_prefs下,SharedPreferences 类提供了一个通用框架,以便用户能够保存和检索原始数据类型的键值对,原始数据类型如下:Boolean,Int,Float,Long,String
参考:SharedPreferences 使用详解-CSDN博客
二、封装SharedPreferencesUtils方法 :
public class SharedPreferencesUtils { private static final String FILE_NAME = "share_date"; private static SharedPreferencesUtils instance; private static SharedPreferences mSharedPreferences; private SharedPreferencesUtils(Context context) { SharedPreferencesUtils.mSharedPreferences = context.getSharedPreferences("share_date", 0); } public static SharedPreferencesUtils getInstance() { if (SharedPreferencesUtils.instance == null) { throw new RuntimeException("class should init!"); } return SharedPreferencesUtils.instance; } public static void init(Context context) { synchronized (SharedPreferencesUtils.class) { if (SharedPreferencesUtils.instance == null) { SharedPreferencesUtils.instance = new SharedPreferencesUtils(context); } } } public Object getData(String s, Object o) { String simpleName = o.getClass().getSimpleName(); if ("Integer".equals(simpleName)) { return SharedPreferencesUtils.mSharedPreferences.getInt(s, (int)o); } if ("Boolean".equals(simpleName)) { return SharedPreferencesUtils.mSharedPreferences.getBoolean(s, (boolean)o); } if ("String".equals(simpleName)) { return SharedPreferencesUtils.mSharedPreferences.getString(s, (String)o); } if ("Float".equals(simpleName)) { return SharedPreferencesUtils.mSharedPreferences.getFloat(s, (float)o); } if ("Long".equals(simpleName)) { return SharedPreferencesUtils.mSharedPreferences.getLong(s, (long)o); } return null; } public <T> T getObject(String s) { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( Base64.decode(SharedPreferencesUtils.mSharedPreferences.getString(s, "") .getBytes(), 0)); try { return (T)new ObjectInputStream(byteArrayInputStream).readObject(); } catch (ClassNotFoundException ex) { return null; } catch (IOException ex2) { return null; } } public void removeData(String s) { final SharedPreferences.Editor edit = SharedPreferencesUtils.mSharedPreferences.edit(); edit.remove(s); edit.apply(); } public void saveData(String s, Object o) { String simpleName = o.getClass().getSimpleName(); SharedPreferences.Editor edit = SharedPreferencesUtils.mSharedPreferences.edit(); if ("Integer".equals(simpleName)) { edit.putInt(s, (int)o); } else if ("Boolean".equals(simpleName)) { edit.putBoolean(s, (boolean)o); } else if ("String".equals(simpleName)) { edit.putString(s, (String)o); } else if ("Float".equals(simpleName)) { edit.putFloat(s, (float)o); } else if ("Long".equals(simpleName)) { edit.putLong(s, (long)o); } edit.apply(); } public void saveObject(String s, Object o) { if (o instanceof Serializable) { SharedPreferences.Editor edit = SharedPreferencesUtils.mSharedPreferences.edit(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { new ObjectOutputStream(byteArrayOutputStream).writeObject(o); edit.putString(s, new String(Base64.encode(byteArrayOutputStream.toByteArray(), 0))); edit.apply(); return; } catch (IOException ex) { ex.printStackTrace(); return; } } Logger.e("对象必须实现序列号接口" ); } public void removeObject(String s) { final SharedPreferences.Editor edit = SharedPreferencesUtils.mSharedPreferences.edit(); edit.remove(s); edit.apply(); } }
三、调用例子:
SharedPreferencesUtils.init(this); mAppSetting = SharedPreferencesUtils.getInstance().getObject("AppSetting"); if (mAppSetting == null) { mAppSetting = new AppSettingBean(); SharedPreferencesUtils.getInstance().saveObject("AppSetting", mAppSetting); }