使用 SharedPreferences 存取复杂类型的数据

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

                                                              编码                                     存入

存入过程:  由ByteArrayOutputStream—————>Base 64编码字符—————>SharedPreferences

                                                      解码                           转换

取出过程:  由XML文件读取字符—————>字节数组—————>字节数组读取流(ByteArrayInputStream)

Android SDK1.5 并未提供Base64 编码和解码,因此,需要使用第三方jar包,在这里使用Apache Commons组件中的Codec组件实现,

可以从以下地址下载 http://commons.apache.org/codec/download_codec.cgi, 下载后包名为commons-codec-1.4.jar

本示例将一个User 类的对象实例和一个图像保存在XML文件中,并在程序重新运行后从XML文件装载User 对象和图像

将 User 对象保存在XML文件中的代码,即存入过程,如下:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();      //1.定义字节数组写入流
    ObjectOutputStream oos = new ObjectOutputStream(baos);          //2.将字节数组写入流转换成对象写入流
    oos.writeObject(user);                                                                //3. 将user对象写到OutputStream
    mySharedPreferences = getSharedPreferences("base64", Activity.MODE_PRIVATE);
    String userBase64 = new String(Base64.encodeBase64(baos.toByteArray()));   //4. 将user对象转换成byte数组,并将其进行Base64编码,得到Base64编码字符串

    SharedPreferences.Editor editor = mySharedPreferences.edit();
    editor.putString("user", userBase64);                                         //5. 将Base64编码字符串写到base64.xml文件中

     editor.commit();

将XML文件读取数据装载到User对象和图像的代码,即取出过程,如下:

   String userBase64 = mySharedPreferences.getString("user", "");       //1.取得Base64编码字符
   base64Bytes = Base64.decodeBase64(userBase64.getBytes());      //2.解码为字节数组
   bais = new ByteArrayInputStream(base64Bytes);                            //3. 转换为字节数组读取流
  ObjectInputStream ois = new ObjectInputStream(bais);                    //4. 转换为对象读取流
   User user = (User) ois.readObject();                                              //5. 从InputStream中读取user对象

示意图见

具体代码请参见 ch06_base64sharedpreferences工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值