android基础学习--->Android(安卓)SharedPreferences存储对象和图片(Android(安卓)SDK2.2之前)1
16lz
2021-01-24
android基础学习--->Android SharedPreferences存储对象和图片(Android SDK2.2之前)1
在存取数据之前,需要使用下面的代码创建一个SharedPreferences对象。
mySharedPreferences = getSharedPreferences("base64",Activity.MODE_PRIVATE);其中mySharedPreferences是在类中定义的SharedPreferences类型变量。在保存Product对象之前,需要创建Product对象,并将相应组件中的值赋给Product类的相应属性。将Product对象保存在XML文件中的代码如下:
java代码:
保存图像的方法与保存Product对象的方法类似。由于在保存之前,需要选择一个图像,并将该图像显示在ImageView组件中,因此,从ImageView组件中可以直接获得要保存的图像。将图象保存在XML文件中的代码如下:
java代码:
其中compress方法的第2个参数表示压缩质量,取值范围是0至100,0表示最高压缩比,但图像效果最差,100则恰恰相反。在本例中取了一个中间值50。
从XML文件中装载Product对象和图像是保存的逆过程。也就是从XML文件中读取Base64格式的字符串,然后将其解码成字节数组,最后将字节数组转换成Product和Drawable对象。装载Product对象的代码如下:
java代码:
装载图像的代码如下:
java代码:
在上面的代码中使用了Drawable类的createFromStream方法直接从流创建了Drawable对象,并使用setImageDrawable方法将图像显示在ImageView组件上。
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代码:
- package eoe.mobile;
- import java.io.Serializable;
- // 需要序列化的类必须实现Serializable接口
- public class Product implements Serializable{
- private String id;
- private String name;
- private float price;
在存取数据之前,需要使用下面的代码创建一个SharedPreferences对象。
mySharedPreferences = getSharedPreferences("base64",Activity.MODE_PRIVATE);其中mySharedPreferences是在类中定义的SharedPreferences类型变量。在保存Product对象之前,需要创建Product对象,并将相应组件中的值赋给Product类的相应属性。将Product对象保存在XML文件中的代码如下:
java代码:
- Product product = new Product();
- product.setId(etProductID.getText().toString());
- product.setName(etProductName.getText().toString());
- product.setPrice(Float.parseFloat(etProductPrice.getText().toString()));
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(baos);
- // 将Product对象放到OutputStream中
- oos.writeObject(product);
- mySharedPreferences = getSharedPreferences("base64", Activity.MODE_PRIVATE);
- // 将Product对象转换成byte数组,并将其进行base64编码
- String productBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
- SharedPreferences.Editor editor = mySharedPreferences.edit();
- // 将编码后的字符串写到base64.xml文件中
- editor.putString("product", productBase64);
- editor.commit();
保存图像的方法与保存Product对象的方法类似。由于在保存之前,需要选择一个图像,并将该图像显示在ImageView组件中,因此,从ImageView组件中可以直接获得要保存的图像。将图象保存在XML文件中的代码如下:
java代码:
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- // 将ImageView组件中的图像压缩成JPEG格式,并将压缩结果保存在ByteArrayOutputStream对象中
- ((BitmapDrawable) imageView.getDrawable()).getBitmap().compress(CompressFormat.JPEG, 50, baos);
- String imageBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
- // 保存由图像字节流转换成的Base64格式字符串
- editor.putString("productImage", imageBase64);
- editor.commit();
其中compress方法的第2个参数表示压缩质量,取值范围是0至100,0表示最高压缩比,但图像效果最差,100则恰恰相反。在本例中取了一个中间值50。
从XML文件中装载Product对象和图像是保存的逆过程。也就是从XML文件中读取Base64格式的字符串,然后将其解码成字节数组,最后将字节数组转换成Product和Drawable对象。装载Product对象的代码如下:
java代码:
- String productBase64 = mySharedPreferences.getString("product", "");
- // 对Base64格式的字符串进行解码
- byte[] base64Bytes = Base64.decodeBase64(productBase64.getBytes());
- ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
- ObjectInputStream ois = new ObjectInputStream(bais);
- // 从ObjectInputStream中读取Product对象
- Product product = (Product) ois.readObject();
装载图像的代码如下:
java代码:
- String imageBase64 = mySharedPreferences.getString("productImage","");
- base64Bytes = Base64.decodeBase64(imageBase64.getBytes());
- bais = new ByteArrayInputStream(base64Bytes);
- // 在ImageView组件上显示图像
- imageView.setImageDrawable(Drawable.createFromStream(bais,"product_image"));
在上面的代码中使用了Drawable类的createFromStream方法直接从流创建了Drawable对象,并使用setImageDrawable方法将图像显示在ImageView组件上。
更多相关文章
- Android序列化基础知识
- Android(安卓)Handler的机制和原理(一)
- Android(安卓)Studio系列教程(三)
- Android(安卓)6.0 权限请求问题
- Android的swift语言-Kotlin(一)
- Android前端RxJava2+Retrofit2;后端SpringMvc实现图片上传
- android完美退出程序(创建单例管理所有打开的activity)
- Android手机游戏开发知识点总结
- Android(安卓)Drawable Resources系列2:标签、.9.png图片制作