Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android應用開發入門(四)SharedPreferences使用介紹

Android應用開發入門(四)SharedPreferences使用介紹

編輯:Android開發實例

  在所有應用程序中,都必然涉及數據的交互。有些時候,應用程序有少量的數據需要保存,並且這些數據的格式很簡單。比如:軟件設置、用戶賬戶設置,用戶習慣設置等,這個時候就可以用到SharedPreferences。

  因為SharedPreferences本身是接口類型,程序無法直接創建SharedPreferences的實例,只能通過Context提供的getSharedPreferences(String name,int mode)方法來獲取SharedPreferences的實例。

  public abstract SharedPreferences getSharedPreferences(String name,int mode)

  第一個參數name為創建的文件名稱,如設定了name為"SilverDemo",則生成的文件名為:SilverDemo.xml。

  第二個參數mode為int類型,此參數描述了創建的文件的可見性。有如下值:

  •     MODE_PRIVATE:指定此SharedPreferences只有本程序可以訪問。
  •     MODE_WORLD_READABLE:指定此SharedPreferences對其他程序只讀且無法修改。
  •     MODE_WORLD_WRITEABLE:指定此SharedPreferences能被其他程序讀寫。
  •     MODE_MULTI_PROCESS:Android2.3之後已經棄之不用了。   

  SharedPreferences保存的數據主要是類似於配置信息格式的數據,因此它保存的數據主要是簡單類型的Key-value對。並且Value部分只能是一些基本數據類型:boolean、float、int、long、String等。

  SharedPreferences的常用方法:

  •   boolean contains(String Key):判斷SharedPreferences是否包含特定Key的數據。
  •   abstract Map<String,?> getAll():獲取SharedPreferences數據裡全部的Key-Value對。
  •     boolean getXxx(String key,Xxx defValue):獲取SharedPreferences數據裡指定Key對應的value。如果該Key不存在,返回默認值defValue。

  SharedPreferences本身為接口類型,並沒有提供寫入數據的能力,而是通過SharedPreferences的內部接口實現寫入數據的能力。調用edit()方法即可獲取它所對應的Editor對象。

  SharedPreferences.Editor的常用方法:

  •   abstract SharedPreferences.Editor clear():清空SharedPreferences裡所有的數據。
  •   abstract SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences中插入指定的Key-Value對。
  •   abstract SharedPreferences.Editor remove(String key):從SharedPreferences中移除指定Key的數據。
  •   boolean commit():當Editor編輯完成後,調用該方法提交修改。

示例,簡單使用SharedPreferences實現存儲,頁面僅存在兩個Button控件,此處不附布局詳情。

  1. public class Main extends Activity {  
  2.       
  3.     Button btnWriter,btnReader;  
  4.     SharedPreferences pre;  
  5.     SharedPreferences.Editor editor;  
  6.     /** Called when the activity is first created. */ 
  7.     @Override 
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.           
  12.         btnWriter=(Button)this.findViewById(R.id.button1);  
  13.         btnReader=(Button)this.findViewById(R.id.button2);  
  14.         pre=getSharedPreferences("sharedDemo", MODE_PRIVATE);//獲取到SharedPreferences,並且權限為本程序讀寫。  
  15.         editor=pre.edit();//打開當前SharedPreferences的編輯器。  
  16.           
  17.         btnWriter.setOnClickListener(writer);  
  18.         btnReader.setOnClickListener(new OnClickListener() {  
  19.               
  20.             public void onClick(View v) {  
  21.                 // 從SharedPreferences中獲取數據  
  22.                 String time=pre.getString("time",null);  
  23.                 int randNum=pre.getInt("random", 0);  
  24.                 String result=time==null?"您暫時還未寫入數據":"寫入時間為:"+time+  
  25.                         "\n上次生產的隨機數為:"+randNum;  
  26.                 Toast.makeText(Main.this,result, 5000).show();  
  27.             }  
  28.         });  
  29.     }  
  30.       
  31.     View.OnClickListener writer=new OnClickListener() {  
  32.           
  33.         public void onClick(View v) {  
  34.             SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 "+"hh:mm:ss");  
  35.             editor.putString("time",sdf.format(new Date()));//向SharedPreferences中寫入數據。  
  36.             editor.putInt("random", (int)(Math.random()*100));  
  37.             editor.commit();//提交修改  
  38.         }  
  39.     };  
  40.       
  41. }  

  創建的文件總是保存在根目錄的data/data/<package name>/shared_prefs目錄下。可以使用File Explorer工具查看,此工具在Eclipse→windows→Show view→other,打開Show View窗口,選中File Explorer。

 

  如圖所示,把此文件導出到PC上,可以看到xml文件中的內容為:

  1. <?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
  2. <map> 
  3. <int name="random" value="83" /> 
  4. <string name="time">2013年3月4日 12:19:38</string> 
  5. </map> 

  

   在創建一個SharedPreferences的時候,如果需要讓別的應用程序也能訪問到本程序的SharedPreferences,則在創建的時候指定MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE就可以了。在其他程序訪問的時候,只要能獲取到創建的程序的Context就可以訪問了。

  具體步驟:

  1. 需要創建其他程序對應的Context。使用Context.createPackageContext(String packageName, int flags)。
  2. 調用其他應用程序的Context的getSharedPerferences(String name,int mode)即可獲取相應的SharedPreferences對象。
  3. 其他操作與操作本程序的SharedPreferences一致。

  Context.createPackageContext(String packageName, int flags):根據包的名稱,返回此包的Context。通過flags控制安全性:可選值:CONTEXT_INCLUDE_CODE 或 CONTEXT_IGNORE_SECURITY(常用).

  

  實際上,開發者完全可以使用IO流的方式訪問xml文件,但是此方法過於繁瑣,沒有直接使用SharedPreferences來的簡潔明了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved