android中sharedPreferences的用法


SharedPreferences介紹:
 

做軟件開發應該都知道,很多軟件會有配置文件,里面存放這程序運行當中的各個屬性值,由於其配置信息並不多,如果采用數據庫來存放並不划算,因為數據庫連接跟操作等耗時大大影響了程序的效率,因此我們使用鍵值這種一一對應的關系來存放這些配置信息。SharedPreferences正是Android中用於實現這中存儲方式的技術。

 

SharedPreferences的使用非常簡單,能夠輕松的存放數據和讀取數據。SharedPreferences只能保存簡單類型的數據,例如,String、int等。一般會將復雜類型的數據轉換成Base64編碼,然后將轉換后的數據以字符串的形式保存在 XML文件中,再用SharedPreferences保存。

 
    使用SharedPreferences保存key-value對的步驟如下:

  (1)使用Activity類的getSharedPreferences方法獲得SharedPreferences對象,其中存儲key-value的文件的名稱由getSharedPreferences方法的第一個參數指定。

  (2)使用SharedPreferences接口的edit獲得SharedPreferences.Editor對象。

  (3)通過SharedPreferences.Editor接口的putXxx方法保存key-value對。其中Xxx表示不同的數據類型。例如:字符串類型的value需要用putString方法。

  (4)通過SharedPreferences.Editor接口的commit方法保存key-value對。commit方法相當於數據庫事務中的提交(commit)操作。

 

具體代碼的書寫流程為:

 

A、存放數據信息

1、打開Preferences,名稱為setting,如果存在則打開它,否則創建新的Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

2、讓setting處於編輯狀態

SharedPreferences.Editor editor = settings.edit();

3、存放數據

editor.putString(“name”,”ATAAW”);
editor.putString(“URL”,”ATAAW.COM”);

4、完成提交

editor.commit();

B、讀取數據信息

1、獲取Preferences

SharedPreferences settings = getSharedPreferences(“setting”, 0);

2、取出數據

String name = settings.getString(“name”,”默認值”);
String url = setting.getString(“URL”,”default”);

以上就是Android中SharedPreferences的使用方法,其中創建的Preferences文件存放位置可以在Eclipse中查看:

DDMS->File Explorer /<package name>/shared_prefs/setting.xml

 

主要代碼 具體如下(僅供參考):

在onCreate方法中調用restorePrefs()方法:

 

//讀取     功能的實現
    private void restorePrefs() {
  // TODO Auto-generated method stub
     //SharedPreferences是一種輕量級的數據存儲方式.是以鍵值對來存儲應用程序的
       //配置信息的一種方式,它只能存儲基本數據類型。
     //聲明一個優先級設置 類型 settings,載入配置文件


  SharedPreferences settings = getPreferences(BMI.MODE_PRIVATE);

  //使用getXXX函數從優先級設置讀取不同類型的內容 得到優先級設置參數的內容


  String pref_height = settings.getString(PREF_HEIGHT, "");

  //此一句為喚醒記憶語句


   field_height.setText(pref_height);
   field_weight.requestFocus();//設置焦點字段 到“體重”字段上 用戶只需直接輸入體重數字就可以了

 }
   
    //存儲    在Activity每次變暗,也就是離開當前屏幕時,記住設置的身高值     即 存儲優先級設置
    protected void onPause()
    {
     super.onPause();
     Log.v("BMI", "onPause1");
     //獲得SharedPreferences對象


     SharedPreferences settings = getPreferences(BMI.MODE_PRIVATE);


     //獲得SharedPreferences.Editor


     SharedPreferences.Editor editor = settings.edit();


     //保存組件的值   為優先級設置填寫不同類型的內容
     //用"field_height"界面組件標識符來取得身高的字符串 然后保存到PREF_HEIGHT所代表的優先級設置參數中


     editor.putString(PREF_HEIGHT, field_height.getText().toString());


     //提交保存的結果   將改變寫到系統中


     editor.commit();
    }

————————————————————————————————————————————————————————————————————————

在使用SharedPreferences時常用的方法包括(方法具體含義參考官方文檔):
[mw_shl_code=java,true]
1.Context.getSharedPreferences (String name, int mode)
2.Activity.getPreferences (int mode)
3.SharedPreferences.edit();
4.SharedPreferences.getXXX(name, defaultValue);
5.SharedPreferences.Editor.putXXX(name, value);
6.SharedPreferences.Editor.commit();

[/mw_shl_code]
步驟:
保存數據
[mw_shl_code=java,true]Log.d("SharedPreferences", "保存數據...");
//獲得SharedPreferences對象
SharedPreferences settings = this.getSharedPreferences("shared_file", 0);
//獲得可編輯對象
SharedPreferences.Editor editor = settings.edit();
editor.putString("name", "Kael Chen");
editor.putInt("age", 22);
editor.commit();
Log.d("SharedPreferences", "保存數據成功");[/mw_shl_code]

讀取數據

[mw_shl_code=java,true]Log.d("SharedPreferences", "獲取數據...");
SharedPreferences settings = this.getSharedPreferences("shared_file", 0);
String name = settings.getString("name", "no name");
int age = settings.getInt("age", 0);
Log.d("SharedPreferences", "name:" + name + ", age:" + age);
Log.d("SharedPreferences", "獲取數據成功");[/mw_shl_code]

執行代碼后,可以看到在data/data/pacakge name/shared_prefs/目錄下多了一個shared_file.xml文件,文件名是由getSharedPreferences方法中傳入的參數決定的。

文件內容如下:
[mw_shl_code=java,true]<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="name">Kael Chen</string><int name="age" value="22" /></map>[/mw_shl_code]

可以看到,不同於ini文件的是,這里是嚴格區分了數據的類型的,所以在getXXX和putXXX相同數據時使用的類型一定要匹配。

--------------------------------------------------------------------------------

另外值得注意的是getSharedPreferences 方法中的mode參數以及getPreferences和getSharedPreferences 的區別。

getPreferences和getSharedPreferences的區別:

1、getPreferences只能由Activity調用,只在調用它的Activity范圍內有效。

2、getSharedPreferences是由Context調用,在包范圍內有效。可以這樣理解,AndroidManifest.xml文件中定義了包的位置,比如我的測試程序中定義的包為cn.kael.sample,那么android會建立data/data/cn.kael.sample/shared_prefs/的目錄,並在其下產生SharePreferences文件。因此如果已經在一個地方使用了SharedPrefernces,並創建了相應的SharedPrefernces文件,然后你想在另一個地方使用該SharedPrefernces文件,你只需要根據文件的路徑規則判斷在新的地方使用SharedPrefernces生成的路徑是不是和之前SharedPrefernces文件的路徑一致,就可以知道兩者之間是否能夠共用SharedPrefernces,即使它們不屬於同一個應用程序(因為android是根據包名來決定SharedPrefernces文件的創建位置的,和應用程序名無關)。

關於mode參數:

要想在程序B想訪問程序A的SharedPrefernces文件:

首先需要程序A在創建SharedPrefernces時使用MODE_WORLD_WRITEABLE或者MODE_WORLD_READABLE作為mode參數:

[mw_shl_code=java,true]SharedPreferences settings = this.getSharedPreferences("shared_file", Context.MODE_WORLD_WRITEABLE);[/mw_shl_code]

然后在程序B中需要先創建程序A的context對象,然后再通過這個context對象來調用getSharedPreferences方法:
[mw_shl_code=java,true]Context contextA = createPackageContext("cn.kael.sample",                    Context.CONTEXT_IGNORE_SECURITY);SharedPreferences settings = contextA.getSharedPreferences(                    "shared_file", Context.MODE_WORLD_WRITEABLE);[/mw_shl_code]

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM