利用SharedPreferences存取对象数据

版权声明:1.版权归原作者Moment ° 回忆 ✨所有; 2.未经原作者允许不得转载本文内容,否则将视为侵权; 3.转载或者引用本文内容请注明来源及原作者; 4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。 https://blog.csdn.net/qq_35366269/article/details/82989459

1、核心工具类:

package com.casic.spsaveobject;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * @author 郭宝
 * @project: SPSaveObject
 * @package: com.casic.spsaveobject
 * @date: 2018/10/9 0009 21:09
 * @brief:
 */

public class SpUtils {

    private Context mContext;

    private static final String SP_NAME = "sp";

    public SpUtils(Context context) {
        mContext = context;
    }

    /*
    * 保存对象
    * */
    public boolean saveObject(String key, Object object) {
        boolean isSuccess = false;
        //实例化SP对象
        SharedPreferences sharedPreferences = mContext.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        //实例化字节数组输出流
        ByteArrayOutputStream byteArrayOutputewStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = null;
        try {
            //实例化对象输出流
            objectOutputStream = new ObjectOutputStream(byteArrayOutputewStream);
            //将对象写入流中
            objectOutputStream.writeObject(object);
            //将写入流中的对象转换为二进制数据
            byte[] bytes = byteArrayOutputewStream.toByteArray();
            //通过Base64将二进制数据转换为字符串
            String s = Base64.encodeToString(bytes, Base64.DEFAULT);

            //存储字符串
            SharedPreferences.Editor edit = sharedPreferences.edit();
            edit.putString(key, s);
            edit.commit();

        } catch (IOException e) {
            e.printStackTrace();
            isSuccess = false;
        } finally {
            try {
                if (objectOutputStream != null) {
                    objectOutputStream.flush();
                    objectOutputStream.close();

                    isSuccess = true;
                }
                if (byteArrayOutputewStream != null) {
                    byteArrayOutputewStream.close();
                    isSuccess = true;
                }


            } catch (IOException e) {
                e.printStackTrace();
                isSuccess = false;
            }
        }

        return isSuccess;
    }

    /*
    * 获取存储在SP中的对象
    * */
    public Object getObject(String key) {
        Object object = null;
        SharedPreferences sharedPreferences = mContext.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
        //根据KEY获取存储的字符串
        String string = sharedPreferences.getString(key, "");
        //通过base64将字符串转换为二进制数据
        byte[] decode = Base64.decode(string, Base64.DEFAULT);

        ByteArrayInputStream byteArrayInputStream = null;
        ObjectInputStream objectInputStream = null;
        try {
            //实例化字节输入流
            byteArrayInputStream = new ByteArrayInputStream(decode);

            //实例化对象输入流
            objectInputStream = new ObjectInputStream(byteArrayInputStream);
            //读取对象数据
            object = objectInputStream.readObject();


        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (byteArrayInputStream != null) {
                    byteArrayInputStream.close();
                }

                if (objectInputStream!=null){
                    objectInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return object;
    }

}

2、要存储的对象,注意该类必须实现Serializable接口,主要是为了对象序列化

package com.casic.spsaveobject;

import java.io.Serializable;

/**
 * @author 郭宝
 * @project: SPSaveObject
 * @package: com.casic.spsaveobject
 * @date: 2018/10/9 0009 21:38
 * @brief:
 */

public class Persion implements Serializable {

    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

3、测试存取

package com.casic.spsaveobject;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Persion persion = new Persion();
        persion.setAge("12");
        persion.setName("张三");

        SpUtils spUtils = new SpUtils(this);
        boolean b = spUtils.saveObject("1", persion);
        if (b){
            Log.i(TAG,"保存成功!");
        }else {
            Log.i(TAG,"保存失败!");
        }

        //MainActivity: 保存成功!

        Persion persion2 = (Persion)spUtils.getObject("1");
        String age = persion2.getAge();
        String name = persion2.getName();

        Log.i(TAG,"age:"+age);
        Log.i(TAG,"name:"+name);

        /*
10-09 21:29:35.040 6592-6592/com.casic.spsaveobject I/MainActivity: age:12
10-09 21:29:35.040 6592-6592/com.casic.spsaveobject I/MainActivity: name:张三
        * */
    }


}

猜你喜欢

转载自blog.csdn.net/qq_35366269/article/details/82989459