美文网首页
shareprefrence存储和获取对象(java.io.No

shareprefrence存储和获取对象(java.io.No

作者: 苏墨白梦觉泪满青衫湿 | 来源:发表于2017-11-02 11:15 被阅读0次

1.存储<对象> 类型

  @SuppressWarnings("unchecked")   

public boolean setObject(String key, T object) {     

if(sharedPreference == null){

packageName = context.getPackageName() + "_preferences";

sharedPreference = context.getSharedPreferences(packageName, Context.MODE_PRIVATE);

}

  //创建字节输出流         

ByteArrayOutputStream baos = new ByteArrayOutputStream();   

    //创建字节对象输出流       

  ObjectOutputStream out = null;     

  try {       

    //然后通过将字对象进行64转码,写入key值为key的sp中         

    out = new ObjectOutputStream(baos);     

      out.writeObject(object);         

  String objectVal = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT));   

        Editor editor = sharedPreference.edit();       

    editor.putString(key, objectVal);       

    editor.commit();       

    return true;     

  } catch (IOException e) {     

      e.printStackTrace();       

    return false;        }    }

  2.获取<对象>类型   

  publicT getObject(String key) {

if(sharedPreference == null){

packageName = context.getPackageName() + "_preferences";

sharedPreference = context.getSharedPreferences(packageName, Context.MODE_PRIVATE);

}

T device = null;

if (sharedPreference.contains(key)) {

String string = sharedPreference.getString(key, "");

if (TextUtils.isEmpty(string)) {

return null;

} else {

//将16进制的数据转为数组,准备反序列化

byte[] stringToBytes = Base64.decode(string.getBytes(), Base64.DEFAULT);

ByteArrayInputStream bis = new ByteArrayInputStream(stringToBytes);

ObjectInputStream is = null;

try {

is = new ObjectInputStream(bis);

//返回反序列化得到的对象

device = (T) is.readObject();

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

return device;

}

3.前方高能!!!注意:

需要存储的对象必须实现Serializable,同时

这个对象的子类也必须实现Serializable,不然都会报java.io.NotSerializableException!!!

转载请注明出处 shareprefrence存储和获取对象(java.io.NotSerializableEx... - 简书

相关文章

  • shareprefrence存储和获取对象(java.io.No

    1.存储<对象> 类型 @SuppressWarnings("unchecked") public boole...

  • hashmap

    hashmap的存储模式 1.工作原理 通过hash的方法,通过put和get存储和获取对象。存储对象时,我们将K...

  • 数据存储

    Q:Android中提供哪些数据持久存储的方法?SharePrefrence、 文件、数据库、ContentPro...

  • SharedPreferences的知识

    SharedPreferences 用法:SharedPreferences对象本身只能获取数据而不支持存储和修改...

  • jsp/el注意事项

    el表达式获取内置对象cookie时:如果存储cookie的键不是"name", el获取该cookie存储的值时...

  • 《AWS 云计算实战》笔记(六)——对象存储

    对象存储—— S3 和 Glacier 对象存储 对象存储可以帮助用户存储图片、视频、文档和可执行文件。 在对象存...

  • Android 缓存策略之LruCache

    LruCache使用LinkedHashMap以强引用的方式存储缓存对象,并提供获取、添加和删除方法。 每次访问一...

  • swift 扩展属性的方法

    原理:由于swift扩展不能添加存储属性,所以考虑以计算属性获取另一对象的存储属性,该对象通过动态绑定给原对象 1...

  • 05. Go极简教程 几句话说明白指针

    总结 指针对象是用来存储内存地址的数据类型 &符号获取对象的内存地址 *符号根据内存地址获取值, 只有指针对象可以...

  • 块存储、文件存储和对象存储

    补充说明Hadoop DFS 不是对象存储,它是一个改造的文件存储系统。 术语对象存储中,OSD(Object-b...

网友评论

      本文标题:shareprefrence存储和获取对象(java.io.No

      本文链接:https://www.haomeiwen.com/subject/firopxtx.html