使用SharedPreferences保存图片与对象
Posted Wiiix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SharedPreferences保存图片与对象相关的知识,希望对你有一定的参考价值。
这是一般SharedPreferences的使用方法 private SharedPreferences mSharedPreferences;
private SharedPreferences.Editor editor;
mSharedPreferences=getSharedPreferences("ThumbLock", Activity.MODE_PRIVATE);
editor=mSharedPreferences.edit();
String temp = mSharedPreferences.getString("Wallpaper", ""); //读取数据
editor.putBoolean("isSecured",true); //存储数据
editor.commit(); //提交保存数据
1.使用SharedPreferences保存图片与读取的方法
private void saveDrawable(int id) Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 50, baos); String imageBase64 = new String(Base64.encodeToString(baos.toByteArray(),Base64.DEFAULT)); editor.putString("P",imageBase64 ); editor.commit(); private Drawable loadDrawable() String temp = share.getString("P", ""); ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(temp.getBytes(), Base64.DEFAULT)); return Drawable.createFromStream(bais, "");
SharedPreferences原则上只能将字符串以key-value的形式保存,但是我们可以采用编码的方式将任何二进制数据转化为字符串,从而将可以将二进制数据保存在SharedPreferences文件中,最常用的编码格式是Base64.
2.使用SharedPreferences保存对象的方法
private void saveProduct(Product product) ByteArrayOutputStream baos = new ByteArrayOutputStream(); try ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(product); String temp = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); Log.i("AAA", temp); editor.putString("product", temp); editor.commit(); catch (IOException e) // TODO Auto-generated catch block e.printStackTrace(); private Product getProduct() String temp = share.getString("product", ""); ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(temp.getBytes(), Base64.DEFAULT)); Product product = null; try ObjectInputStream ois = new ObjectInputStream(bais); product = (Product) ois.readObject(); catch (IOException e) // TODO Auto-generated catch block Log.i("AAA", e.toString()); catch(ClassNotFoundException e1) Log.i("AAA", e1.toString()); return product;
由于二进制数据经过编码后可以用SharedPreferences以字符串的形式存储,所以保存对象也称为可能。
对象可以被SharedPreferences存储的前提是该对象被序列化了,也就是说要实现Serializable接口,实际上Serializable接口是个空接口,只是为了标记该对象是被序列化的。public static class Product implements Serializable String name; String id; int count; public String getName() return name; public void setName(String name) this.name = name; public String getId() return id; public void setId(String id) this.id = id; public int getCount() return count; public void setCount(int count) this.count = count; public String toString() return "name:"+name+" id:"+id+" count:"+count;
如果该类是内部类的话要写成static 不然会出现java.io.NotSerializableException异常。
3.SharedPreferences将数据文件保存在指定路径上
使用以上的方法在指定目录下保存数据private void initSharedPreferences(String path,String name,int mode) try Field field =ContextWrapper.class.getDeclaredField("mBase"); field.setAccessible(true); Object obj = field.get(this); field = obj.getClass().getDeclaredField("mPreferencesDir"); field.setAccessible(true); File file = new File(path); field.set(obj, file); share = getSharedPreferences(name, mode); editor = share.edit(); catch (Exception e) // TODO: handle exception e.printStackTrace();
initSharedPreferences("/data/fly","config",Activity.MODE_PRIVATE); editor.putString("AA", "AAaa"); editor.commit(); Toast.makeText(this, share.getString("AA", ""), 1000).show();
以上是关于使用SharedPreferences保存图片与对象的主要内容,如果未能解决你的问题,请参考以下文章