除了SQLite資料庫外,SharedPreferences也是一種輕型的資料存放區方式,它的本質是基於XML檔案儲存體key-value索引值對資料,通常用來儲存一些簡單的配置資訊。其儲存位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象本身只能擷取資料而不支援儲存和修改,儲存修改是通過Editor對象實現。實現SharedPreferences儲存的步驟如下:
一、根據Context擷取SharedPreferences對象
二、利用edit()方法擷取Editor對象。
三、通過EditorObject Storage Servicekey-value索引值對資料。
四、通過commit()方法提交資料。
具體實現代碼如下:
1 public class MainActivity extends Activity {
2 @Override
3 public void 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資料庫這樣的其他資料存放區方式。