版权声明: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:张三
* */
}
}