SharedPreferences存储对象工具类

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实体类的操作。

    原文作者:木大白易
    原文地址: https://blog.csdn.net/aiynmimi/article/details/49157317
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞