android基础学习--->Android SharedPreferences存储对象和图片(Android SDK2.2之前)1

2.2之前Android SDK中并未提供Base64编码和解码库

(1)Share中保存对象

public static void setSharedPreferencesObject(Context context, Object Object, String key) {

SharedPreferences settings = context

.getSharedPreferences(PREFS_NAME, 0);

// 创建字节输出流

ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {

// 创建对象输出流,并封装字节流

ObjectOutputStream oos = new ObjectOutputStream(baos);

// 将对象写入字节流

oos.writeObject(Object);

// 将字节流编码成base64的字符窜

String oAuth_Base64 = new String(Base64.encodeBase64(baos.toByteArray()));

SharedPreferences.Editor editor = settings.edit();

editor.putString(key, oAuth_Base64);

editor.commit();

} catch (IOException e) {

e.printStackTrace();

}

}

public static Object getSharedPreferencesObject(Context context, String key) {

Object object = new Object();

SharedPreferences settings = context

.getSharedPreferences(PREFS_NAME, 0);

String productBase64 = settings.getString(key, "");

// 读取字节

byte[] base64 = Base64.decodeBase64(productBase64.getBytes());

// 封装到字节流

ByteArrayInputStream bais = new ByteArrayInputStream(base64);

try {

// 再次封装

ObjectInputStream bis = new ObjectInputStream(bais);

try {

// 读取对象

object = (Object) bis.readObject();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

} catch (StreamCorruptedException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return object;

}

private final static String PREFS_NAME = "MyFile";

(2) 保存图片

保存图像的方法与保存Product对象的方法类似。由于在保存之前,需要选择一个图像,并将该图像显示在ImageView组件中,因此,从ImageView组件中可以直接获得要保存的图像。将图象保存在XML文件中的代码如下:

java代码:

  1. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  2. // 将ImageView组件中的图像压缩成JPEG格式,并将压缩结果保存在ByteArrayOutputStream对象中
  3. ((BitmapDrawable) imageView.getDrawable()).getBitmap().compress(CompressFormat.JPEG, 50, baos);
  4. String imageBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
  5. // 保存由图像字节流转换成的Base64格式字符串
  6. editor.putString("productImage", imageBase64);
  7. editor.commit();
复制代码
其中compress方法的第2个参数表示压缩质量,取值范围是0至100,0表示最高压缩比,但图像效果最差,100则恰恰相反。在本例中取了一个中间值50。

从XML文件中装载Product对象和图像是保存的逆过程。也就是从XML文件中读取Base64格式的字符串,然后将其解码成字节数组,最后将字节数组转换成Product和Drawable对象。装载Product对象的代码如下:

java代码:
  1. String productBase64 = mySharedPreferences.getString("product", "");
  2. // 对Base64格式的字符串进行解码
  3. byte[] base64Bytes = Base64.decodeBase64(productBase64.getBytes());
  4. ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
  5. ObjectInputStream ois = new ObjectInputStream(bais);
  6. // 从ObjectInputStream中读取Product对象
  7. Product product = (Product) ois.readObject();
复制代码
装载图像的代码如下:

java代码:
  1. String imageBase64 = mySharedPreferences.getString("productImage","");
  2. base64Bytes = Base64.decodeBase64(imageBase64.getBytes());
  3. bais = new ByteArrayInputStream(base64Bytes);
  4. // 在ImageView组件上显示图像
  5. imageView.setImageDrawable(Drawable.createFromStream(bais,"product_image"));
复制代码


在上面的代码中使用了Drawable类的createFromStream方法直接从流创建了Drawable对象,并使用setImageDrawable方法将图像显示在ImageView组件上。

参考http://blog.csdn.net/wo153/article/details/6706360

更多相关文章

  1. 类和 Json对象
  2. Android(安卓)系统广播机制
  3. Android(安卓)Bundle类
  4. Android--用Pull解析器将对象解析成xml文件及单元测试
  5. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
  6. android 反射解析xml文件成为java对象
  7. Android(安卓)多线程更新控件
  8. Android(安卓)HttpClient
  9. Android(安卓)HttpClient

随机推荐

  1. 【翻译】Android(安卓)Support Library F
  2. Android中的Matrix,以及set,pre和post的区
  3. android 视频播放 Google exoplayer
  4. Android — Room 数据库跳跃式升级(Migr
  5. 安卓(Android)surfaceview无法使用gestured
  6. Android 视图层级分析辅助工具详解
  7. Android应用名称多行显示
  8. 开源整理(持续更新)
  9. 【Android】Handler 工作流程
  10. Android录音并实时转成MP3格式