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

2.2之前Android SDK中并未提供Base64编码和解码库。因此,2.2之前的需要使用第三方的jar包。在本例中使用了Apache Commons组件集中的Codec组件进行Base64编码和解码。读者可以从如下的地址下载Codec组件的安装包。

在Android工程目录的lib子目录中已经包含了Codec组件的jar包(commons-codec-1.4.jar),因此,读者可以在该工程中直接使用Codec组件。

在本例中将一个Product类的对象实例和一个图像保存在XML文件中,并在程序重新运行后从XML文件装载Product对象和图像。下面是Product类的代码:

java代码:

  1. package eoe.mobile;


  2. import java.io.Serializable;
  3. // 需要序列化的类必须实现Serializable接口
  4. public class Product implements Serializable{
  5. private String id;
  6. private String name;
  7. private float price;
复制代码
在存取数据之前,需要使用下面的代码创建一个SharedPreferences对象。

mySharedPreferences = getSharedPreferences("base64",Activity.MODE_PRIVATE);其中mySharedPreferences是在类中定义的SharedPreferences类型变量。在保存Product对象之前,需要创建Product对象,并将相应组件中的值赋给Product类的相应属性。将Product对象保存在XML文件中的代码如下:

java代码:
  1. Product product = new Product();
  2. product.setId(etProductID.getText().toString());
  3. product.setName(etProductName.getText().toString());
  4. product.setPrice(Float.parseFloat(etProductPrice.getText().toString()));
  5. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  6. ObjectOutputStream oos = new ObjectOutputStream(baos);
  7. // 将Product对象放到OutputStream中
  8. oos.writeObject(product);
  9. mySharedPreferences = getSharedPreferences("base64", Activity.MODE_PRIVATE);
  10. // 将Product对象转换成byte数组,并将其进行base64编码
  11. String productBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
  12. SharedPreferences.Editor editor = mySharedPreferences.edit();
  13. // 将编码后的字符串写到base64.xml文件中
  14. editor.putString("product", productBase64);
  15. editor.commit();
复制代码
保存图像的方法与保存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组件上。

更多相关文章

  1. Android序列化基础知识
  2. Android(安卓)Handler的机制和原理(一)
  3. Android(安卓)Studio系列教程(三)
  4. Android(安卓)6.0 权限请求问题
  5. Android的swift语言-Kotlin(一)
  6. Android前端RxJava2+Retrofit2;后端SpringMvc实现图片上传
  7. android完美退出程序(创建单例管理所有打开的activity)
  8. Android手机游戏开发知识点总结
  9. Android(安卓)Drawable Resources系列2:标签、.9.png图片制作

随机推荐

  1. Android(安卓)手机共享笔记本Wifi
  2. Android中滑屏初探 ---- scrollTo 以及 s
  3. JDK8的安装及win10配置JDK8的环境变量
  4. Android Paging组件Demo
  5. android感应器Senor
  6. 【Android】Android 相关下载
  7. android上一些方法的区别和用法的注意事
  8. IOS 5编程 -2 -准备工作。
  9. 2011年Android Camera学习笔记之一
  10. 使用sencha cmd创建android应用