分享

SharedPreferences 存储复杂的对象

 昵称11869283 2013-04-12
今晚我来介绍一下SharedPreferences如何存储复杂的对象,首先我们创建一个简单对象 
  1. <pre name="code" class="java">package com.zb;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Prodect implements Serializable {  
  6.     private String id;  
  7.     private String name;  
  8.     private float price;  
  9.     public String getId() {  
  10.         return id;  
  11.     }  
  12.     public void setId(String id) {  
  13.         this.id = id;  
  14.     }  
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public float getPrice() {  
  22.         return price;  
  23.     }  
  24.     public void setPrice(float price) {  
  25.         this.price = price;  
  26.     }  
  27. }  
  28. </pre><br>  
  29. <br>  
  30. <pre></pre>  
  31. <p></p>  
  32. <pre></pre>  
  33. <p></p>  
  34. 这里的对象必须是实现Serializable接口,否则会出错  
  35. <p></p>  
  36. <p>然后我们还要准备一个jar包就是commons-codec-1.4.jar,这个jar包负责将对象转换为base64的编码方式。</p>  
  37. <p></p>  
  38. <p>然我们看一下如何保存的:</p>  
  39. <p></p>  
  40. <p></p>  
  41. <pre name="code" class="java">package com.zb;  
  42.   
  43. import java.io.ByteArrayInputStream;  
  44. import java.io.ByteArrayOutputStream;  
  45. import java.io.IOException;  
  46. import java.io.ObjectInputStream;  
  47. import java.io.ObjectOutputStream;  
  48. import java.io.StreamCorruptedException;  
  49.   
  50. import org.apache.commons.codec.binary.Base64;  
  51.   
  52. import android.app.Activity;  
  53. import android.content.SharedPreferences;  
  54. import android.content.SharedPreferences.Editor;  
  55. import android.os.Bundle;  
  56. import android.util.Log;  
  57. import android.widget.TextView;  
  58.   
  59. public class SharedDemoActivity extends Activity {  
  60.     /** Called when the activity is first created. */  
  61.   
  62.     private Prodect prodect;  
  63.   
  64.     @Override  
  65.     public void onCreate(Bundle savedInstanceState) {  
  66.         super.onCreate(savedInstanceState);  
  67.         setContentView(R.layout.main);  
  68.         readProduct();  
  69.         referView();  
  70.     }  
  71.   
  72.     private void init() {  
  73.         prodect = new Prodect();  
  74.         prodect.setId("1001");  
  75.         prodect.setName("红河");  
  76.         prodect.setPrice(6);  
  77.     }  
  78.       
  79.     public void referView(){  
  80.         TextView tv=(TextView) findViewById(R.id.share);  
  81.         tv.setText(prodect==null?"错":prodect.getName());  
  82.     }  
  83.   
  84.     public void readProduct() {  
  85.         SharedPreferences preferences = getSharedPreferences("base64",  
  86.                 MODE_PRIVATE);  
  87.         String productBase64 = preferences.getString("product""");  
  88.         if (productBase64 == "") {  
  89.             init();  
  90.             return;  
  91.         }  
  92.           
  93.         //读取字节  
  94.         byte[] base64 = Base64.decodeBase64(productBase64.getBytes());  
  95.           
  96.         //封装到字节流  
  97.         ByteArrayInputStream bais = new ByteArrayInputStream(base64);  
  98.         try {  
  99.             //再次封装  
  100.             ObjectInputStream bis = new ObjectInputStream(bais);  
  101.             try {  
  102.                 //读取对象  
  103.                 prodect = (Prodect) bis.readObject();  
  104.             } catch (ClassNotFoundException e) {  
  105.                 // TODO Auto-generated catch block  
  106.                 e.printStackTrace();  
  107.             }  
  108.         } catch (StreamCorruptedException e) {  
  109.             // TODO Auto-generated catch block  
  110.             e.printStackTrace();  
  111.         } catch (IOException e) {  
  112.             // TODO Auto-generated catch block  
  113.             e.printStackTrace();  
  114.         }  
  115.     }  
  116.   
  117.     public void saveProduct() {  
  118.         SharedPreferences preferences = getSharedPreferences("base64",  
  119.                 MODE_PRIVATE);  
  120.           
  121.         //创建字节输出流  
  122.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  123.         try {  
  124.             //创建对象输出流,并封装字节流  
  125.             ObjectOutputStream oos = new ObjectOutputStream(baos);  
  126.               
  127.             //将对象写入字节流  
  128.             oos.writeObject(prodect);  
  129.   
  130.             //将字节流编码成base64的字符窜  
  131.             String productBase64 = new String(Base64.encodeBase64(baos  
  132.                     .toByteArray()));  
  133.   
  134.             Editor editor = preferences.edit();  
  135.             editor.putString("product", productBase64);  
  136.   
  137.             editor.commit();  
  138.         } catch (IOException e) {  
  139.             // TODO Auto-generated catch block  
  140.             e.printStackTrace();  
  141.         }  
  142.   
  143.         Log.i("ok""存储成功");  
  144.     }  
  145.   
  146.     @Override  
  147.     protected void onStop() {  
  148.         saveProduct();  
  149.         super.onStop();  
  150.   
  151.     }  
  152.   
  153. }</pre><br>  
  154. 这样就可以存储复杂的对象了!<br>  
  155. <br>  
  156. <br>  
  157. <br>  
  158. <p></p>  
  159. <p><br>  
  160. </p>  
  161. <pre></pre>  
  162. <pre></pre>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多