使用SharedPreferences存储对象、图片

来源:互联网 发布:java下载了怎么用 编辑:程序博客网 时间:2024/04/26 06:38

如果要用 SharedPreferences 存取复杂的数据类型(类,图像等),就需要对这些数据进行编码。通常会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在XML文件中。

一、SharedPreferences存储对象

1、创建要存储的实体类对象(要序列化)

public class Student implements Serializable{    private String name;    private String age;    private String address;    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;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}

2、存储对象

SharedPreferences sharedPreferences = getSharedPreferences("student", MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();ByteArrayOutputStream baos = new ByteArrayOutputStream();Student student = new Student();student.setName("谁是谁");student.setAge("23");student.setAddress("水泥星");try {     ObjectOutputStream oos = new ObjectOutputStream(baos);     oos.writeObject(student);     String base64Student = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);     editor.putString("student", base64Student);     editor.apply();     oos.close();        } catch (IOException e) {            e.printStackTrace();        }

3、取对象

SharedPreferences sharedPreferences = getSharedPreferences("student", MODE_PRIVATE);String studentString = sharedPreferences.getString("student", "");byte[] base64Student = Base64.decode(studentString, Base64.DEFAULT);ByteArrayInputStream bais = new ByteArrayInputStream(base64Student);try {     ObjectInputStream ois = new ObjectInputStream(bais);     Student student = (Student) ois.readObject();     Log.e("------------->", "" + student.getAddress() + student.getAge() + student.getName());        } catch (Exception e) {            e.printStackTrace();        }    }

二、SharedPreferences保存图片

1、存

SharedPreferences sharedPreferences = getSharedPreferences("student", MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();ByteArrayOutputStream baos2 = new ByteArrayOutputStream();((BitmapDrawable) getResources().getDrawable(R.drawable.lanbojini)).getBitmap().compress(Bitmap.CompressFormat.JPEG, 100, baos2);String imageBase64 = Base64.encodeToString(baos2.toByteArray(), Base64.DEFAULT);editor.putString("productImg", imageBase64);editor.commit();

2、取

iv_prod_img = (ImageView) findViewById(R.id.iv_prod_img);                    byte[] imagByte = Base64.decode(sharedPreferences.getString("productImg",""), Base64.DEFAULT);                    ByteArrayInputStream bais2 = new ByteArrayInputStream(imagByte);                    iv_prod_img.setImageDrawable(Drawable.createFromStream(bais2,  "imagByte"));

参考博客

0 0