Android數據的四種存儲方式(三) —— SharePreferences

咱們在開發軟件的時候,常須要向用戶提供軟件參數設置功能,例如咱們經常使用的微信,用戶能夠設置是否容許陌生人添加本身爲好友.對於軟件配置參數的保存,若是是在window下一般咱們會採用ini文件進行保存.若是是J2EE下面,咱們會採用properties屬性文件或者xml進行保存.在咱們的Android應用中又適合採用什麼方式保存軟件配置參數呢?Android平臺給咱們提供了一個SharedPreferences類,它是一個輕量級應用程序內部輕量級的存儲方案,特別適合用於保存軟件配置參數,好比boolean,int,float,long,String等數據.使用SharedPreferences保存數據,其實質是採用了xml文件存放數據,路徑爲:/data/data/<package name>/shared_prefs.web

獲取SharedPreferences的兩種方式:數據庫

1 調用Context對象的getSharedPreferences()方法微信

2 調用Activity對象的getPreferences()方法ide

兩種方式的區別:this

調用Context對象的getSharedPreferences()方法得到的SharedPreferences對象能夠被同一應用程序下的其餘組件共享.spa

調用Activity對象的getPreferences()方法得到的SharedPreferences對象只能在該Activity中使用.code

 

SharedPreferences的四種操做模式:orm

Context.MODE_PRIVATExml

Context.MODE_APPEND對象

Context.MODE_WORLD_READABLE

Context.MODE_WORLD_WRITEABLE

 

Context.MODE_PRIVATE:爲默認操做模式,表明該文件是私有數據,只能被應用自己訪問,在該模式下,寫入的內容會覆蓋原文件的內容

Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,不然就建立新文件.

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其餘應用是否有權限讀寫該文件.

MODE_WORLD_READABLE:表示當前文件能夠被其餘應用讀取.

MODE_WORLD_WRITEABLE:表示當前文件能夠被其餘應用寫入.

  具體實現代碼以下:

複製代碼

 1 publicclass MainActivity extends Activity {
2
   @Override
3 publicvoid
onCreate(Bundle savedInstanceState) {
4 super
.onCreate(savedInstanceState);
5
      setContentView(R.layout.main);
6
     
7 //獲取SharedPreferences對象

8       Context ctx = MainActivity.this;      
9       SharedPreferences sp = ctx.getSharedPreferences("SP"
, MODE_PRIVATE);
10 //存入數據

11       Editor editor = sp.edit();
12       editor.putString("STRING_KEY", "string"
);
13       editor.putInt("INT_KEY", 0
);
14       editor.putBoolean("BOOLEAN_KEY", true
);
15
      editor.commit();
16
     
17 //返回STRING_KEY的值

18       Log.d("SP", sp.getString("STRING_KEY", "none"));
19 //若是NOT_EXIST不存在,則返回值爲"none"

20       Log.d("SP", sp.getString("NOT_EXIST", "none"));
21
   }
22 }

複製代碼

   這段代碼執行事後,即在/data/data/com.test/shared_prefs目錄下生成了一個SP.xml文件,一個應用能夠建立多個這樣的xml文件。如圖所示: 

   SP.xml文件的具體內容以下:

1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
2 <map>
3 <string name="STRING_KEY">string</string>
4 <int name="INT_KEY" value="0"/>
5 <boolean name="BOOLEAN_KEY" value="true"/>
6 </map>

  在程序代碼中,經過getXXX方法,能夠方便的得到對應Key的Value值,若是key值錯誤或者此key無對應value值,SharedPreferences提供了一個賦予默認值的機會,以此保證程序的健壯性。以下圖運行結果中由於並沒有值爲"NOT_EXIST"的Key,因此Log打印出的是其默認值:「none」。在訪問一個不存在key值這個過程當中,並沒有任何異常拋出。  

  SharedPreferences對象與SQLite數據庫相比,免去了建立數據庫,建立表,寫SQL語句等諸多操做,相對而言更加方便,簡潔。可是SharedPreferences也有其自身缺陷,好比其職能存儲boolean,int,float,long和String五種簡單的數據類型,好比其沒法進行條件查詢等。因此不論SharedPreferences的數據存儲操做是如何簡單,它也只能是存儲方式的一種補充,而沒法徹底替代如SQLite數據庫這樣的其餘數據存儲方式。

相關文章
相關標籤/搜索