Sp工具类里增加下面两个方法
1 SP_NAME 就是一个字符串,可以命名为"项目名_sp"
2 存储的对象一定要实现Serializable而不是Parceable,注意成员类也要实现Serializable
public class ChildModeBean implements Serializable {
/**
* code : 200
* data : {"start_time":1572904800,"end_time":1572962400,"read_time":2400,"is_open":1,"is_set_password":0}
* msg :
* timestampName : 1572946427
*/
public int code;
public DataBean data;
public String msg;
public int timestampName;
public static class DataBean implements Serializable{
/**
* start_time : 1572904800
* end_time : 1572962400
* read_time : 2400
* is_open : 1
* is_set_password : 0
*/
public long start_time;
public long end_time;
public int read_time;
public int is_open;
public int is_set_password;
public int read_length;
//是否关闭了下次认证,1关闭了 0是没有关闭
public int close_next_check;
}
}
/**
* 使用SharedPreference保存序列化对象
* 用Base64.encode将字节文件转换成Base64编码保存在String中
*
* @param context 上下文
* @param key 储存对象的key
* @param object object对象 对象必须实现Serializable序列化,否则会出问题,
* out.writeObject 无法写入 Parcelable 序列化的对象
*/
public static void putObject(Context context, String key, Object object) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
//创建字节输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//创建字节对象输出流
ObjectOutputStream out = null;
try {
//然后通过将字对象进行64转码,写入sp中
out = new ObjectOutputStream(baos);
out.writeObject(object);
String objectValue = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));
SharedPreferences.Editor editor = sp.edit();
editor.putString(key, objectValue);
editor.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.close();
}
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 获取SharedPreference保存的对象
* 使用Base64解密String,返回Object对象
*
* @param context 上下文
* @param key 储存对象的key
* @param <T> 泛型
* @return 返回保存的对象
*/
public static <T> T getObject(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
if (sp.contains(key)) {
String objectValue = sp.getString(key, null);
byte[] buffer = Base64.decode(objectValue, Base64.DEFAULT);
//一样通过读取字节流,创建字节流输入流,写入对象并作强制转换
ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(bais);
T t = (T) ois.readObject();
return t;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (bais != null) {
bais.close();
}
if (ois != null) {
ois.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}