SerializableUtil类,用来集合,对象与字符串间的转换。
import android.util.Base64;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.List;
public class SerializableUtil {
public static <E> String listToString(List<E> list) throws IOException {
//实例化一个ByteArrayOutputStream对象,用来装载压缩后的字节文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//然后将得到的字符数据装载到ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(baos);
//writeObject 方法负责写入特定类的对象的状态,以便相应的readObject可以还原它
oos.writeObject(list);
//最后,用Base64.encode将字节文件转换成Base64编码,并以String形式保存
String listString = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));
//关闭oos
oos.close();
return listString;
}
public static <E> List<E> stringToList(String str) throws StreamCorruptedException,IOException{
byte[] mByte = Base64.decode(str.getBytes(),Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(mByte);
ObjectInputStream ois = new ObjectInputStream(bais);
List<E> stringList = null;
try {
stringList = (List<E>) ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stringList;
}
public static String objToStr(Object obj)throws IOException
{
if(obj == null) {
return "";
}
//实例化一个ByteArrayOutputStream对象,用来装载压缩后的字节文件
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//然后将得到的字符数据装载到ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(baos);
//writeObject 方法负责写入特定类的对象的状态,以便相应的readObject可以还原它
oos.writeObject(obj);
//最后,用Base64.encode将字节文件转换成Base64编码,并以String形式保存
String listString = new String(Base64.encode(baos.toByteArray(),Base64.DEFAULT));
//关闭oos
oos.close();
return listString;
}
//将序列化的数据还原成Object
public static Object strToObj(String str) throws StreamCorruptedException,IOException{
byte[] mByte = Base64.decode(str.getBytes(),Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(mByte);
ObjectInputStream ois = new ObjectInputStream(bais);
try {
return ois.readObject();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
SharedPreUtil为工具类
import android.content.Context;
import android.content.SharedPreferences;
import java.io.IOException;
public class SharedPreUtil {
private SharedPreferences sharedPreferences;
private static SharedPreUtil sharedPreUtil;
private UserInfo userInfo;
public SharedPreUtil(Context context) {
sharedPreferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);
}
//此方法在Application中初始化
public static synchronized void initSharedPreference(Context context){
if (sharedPreUtil==null){
sharedPreUtil=new SharedPreUtil(context);
}
}
public static synchronized SharedPreUtil NewInstance() {
return sharedPreUtil;
}
public SharedPreferences getSharedPreferences() {
return sharedPreferences;
}
//下边是对实体类和集合转换为字符串的存储和读取操作
public synchronized void putUser(UserInfo userInfo){
SharedPreferences.Editor editor=getSharedPreferences().edit();
String str="";
try {
str=SerializableUtil.objToStr(userInfo);
} catch (IOException e) {
e.printStackTrace();
}
editor.putString("userInfo", str);
editor.commit();
this.userInfo=userInfo;
}
public synchronized UserInfo getUser(){
if (userInfo==null){
userInfo=new UserInfo();
String str=sharedPreferences.getString("userInfo", "");
try {
Object object=SerializableUtil.strToObj(str);
if (object!=null){
userInfo= (UserInfo) object;
}
} catch (IOException e) {
e.printStackTrace();
}
}
return userInfo;
}
}
使用步骤:
1. 创建实体类,实现serializable接口,为其中字段添加set()和get()方法。
2. 创建SerializableUtil类。
3. 创建SharedPreUtil类,并在下边写入具体的存储和读取操作!比如代码中对UserInfo实体类的操作。