首先需要保存的实体类必须实现Serializable接口,然后调用其中的saveSerializableEntity即可,取出的时候调用getSerializableEntity即可
public class ShardPrefUtils { private static SharedPreferences mSharedPref; private static final String SHAREDPREF_NAME = Constant.SHAREDPREF_NAME;
/** * writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以还原它 * 最后,用Base64.encode将字节文件转换成Base64编码保存在String中 * * @param object 待加密的转换为String的对象 * @return String 加密后的String */ private static String Object2String(Object object) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); String string = new String(Base64.encode(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)); objectOutputStream.close(); return string; } catch (IOException e) { e.printStackTrace(); return null; } } /** * 使用Base64解密String,返回Object对象 * * @param objectString 待解密的String * @return object 解密后的object */ private static Object String2Object(String objectString) { byte[] mobileBytes = Base64.decode(objectString.getBytes(), Base64.DEFAULT); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(mobileBytes); ObjectInputStream objectInputStream = null; try { objectInputStream = new ObjectInputStream(byteArrayInputStream); Object object = objectInputStream.readObject(); objectInputStream.close(); return object; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 使用SharedPreference保存对象 * * @param fileKey 储存文件的key * @param key 储存对象的key * @param saveObject 储存的对象 */ public static void saveSerializableEntity(String fileKey, String key, Object saveObject) { if(mSharedPref == null){ mSharedPref = MyApplication.mContext.getSharedPreferences(SHAREDPREF_NAME, Context.MODE_PRIVATE); } SharedPreferences.Editor editor = mSharedPref.edit(); String string = Object2String(saveObject); editor.putString(key, string); editor.commit(); } /** * 获取SharedPreference保存的对象 * * @param fileKey 储存文件的key * @param key 储存对象的key * @return object 返回根据key得到的对象 */ public static Object getSerializableEntity(String fileKey, String key) { if(mSharedPref == null){ mSharedPref = MyApplication.mContext.getSharedPreferences(SHAREDPREF_NAME, Context.MODE_PRIVATE); } String string = mSharedPref.getString(key, null); if (string != null) { Object object = String2Object(string); return object; } else { return null; } }
}
上面的方法必须要实现Serializable接口,实现Parcleble接口是不行的,如果其中有Bitmap之类的属性那就不可以用Serializable了,因为Bitmap本事就已经实现了Parcleable接口,如果有的话需要单独存储。