在Android系統中提供了多種儲存技術.通過這些儲存技術可以將資料存放區在各種儲存介質上,
Android
為資料存放區提供了如下幾種方式:
1、檔案
2、
SharedPreferences(
參數
)
3、SQLite資料庫
4、
內容提供者(
Content provider
)
5、網路
在這裡我們將對sharedpreferences儲存方式進行介紹。
SharedPreferences是一種輕量級的資料存放區方式,它可以用索引值對的方式把簡
單資料類型(boolean、int、float、long和String)儲存在應用程式的私人目錄下(data/data/[包名]
/shared_prefs/)自己定義的xml檔案中。
SharedPreferences是以索引值對來儲存應用程式的配置資訊的一種方式,它只能儲存基礎資料型別 (Elementary Data Type)。一個程式的設定檔僅可以在本應用程式中使
用,或者說只能在同一個包內使用,不能在不同的包之間使用。實際上sharedPreferences是採用了XML格式將資料存放區到裝置中,在DDMS
中的File Explorer中的/data/data//shares_prefs下。
下面我們以一個例子來說明如何使用sharedpreferences來儲存資料,該例子是在Activity退出時儲存介面的基本的資訊,當再次運行該程式的時候,就會讀取上次儲存的資訊。【介面中有一個帳號EditText,密碼EditText和一個記住密碼的CheckBox,輸入帳號和密碼,如果選中記住密碼複選框,下次開啟程式時,則會顯示帳號和密碼;如果沒有選中記住密碼複選框,下次開啟程式時,則只是顯示帳號。】
res/layout/main.xml中的代碼如下:
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /> <TextView<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="Welcome to Andy's Blog!"<br /> android:textSize="16sp"/><br /> <LinearLayout<br /> android:orientation="horizontal"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"><br /> <TextView<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="帳號:"/><br /> <EditText<br /> android:id="@+id/username"<br /> android:layout_height="wrap_content"<br /> android:layout_width="fill_parent"/><br /> </LinearLayout><br /> <LinearLayout<br /> android:orientation="horizontal"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"><br /> <TextView<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="密碼:"/><br /> <EditText<br /> android:id="@+id/password"<br /> android:layout_height="wrap_content"<br /> android:layout_width="fill_parent"<br /> android:inputType="textPassword"/><br /> </LinearLayout><br /> <CheckBox<br /> android:id="@+id/ischecked"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="記住密碼"/><br /></LinearLayout><br />
註:密碼的EditText中的 android:inputType="textPassword" 屬性標誌該文字框輸入的字元將以黑點來代替字元,表示為密碼類型。
Activity中的代碼如下:
package com.andyidea;<br />import android.app.Activity;<br />import android.content.SharedPreferences;<br />import android.os.Bundle;<br />import android.widget.CheckBox;<br />import android.widget.CompoundButton;<br />import android.widget.EditText;<br />public class TestDemo extends Activity {</p><p>private final String PREFERENCES_NAME = "userinfo";<br />private EditText username,password;<br />private CheckBox cbRemember;</p><p>private String userName,passWord;<br />private Boolean isRemember = false;</p><p> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> initializeViews();</p><p> SharedPreferences preferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);<br />username.setText(preferences.getString("UserName", null));<br />cbRemember.setChecked(preferences.getBoolean("Remember", true));<br />if(cbRemember.isChecked()){<br />password.setText(preferences.getString("PassWord", null));<br />}else{<br />password.setText(null);<br />}<br /> }</p><p> /**<br /> * 初始化UI控制項<br /> */<br /> private void initializeViews(){<br /> username = (EditText)findViewById(R.id.username);<br /> password = (EditText)findViewById(R.id.password);</p><p> cbRemember = (CheckBox)findViewById(R.id.ischecked);<br /> cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {</p><p>@Override<br />public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {<br />isRemember = isChecked;<br />}<br />});<br /> }<br />@Override<br />public void onStop() {<br />super.onStop();<br />SharedPreferences agPreferences = getSharedPreferences(PREFERENCES_NAME, Activity.MODE_PRIVATE);<br />SharedPreferences.Editor editor = agPreferences.edit();</p><p>userName = username.getText().toString();<br />passWord = password.getText().toString();<br />editor.putString("UserName", userName);<br />editor.putString("PassWord", passWord);<br />editor.putBoolean("Remember", isRemember);<br />editor.commit();<br />} </p><p>}
運行效果如下:
以上的程式是通過建立一個 userinfo.xml 檔案來儲存使用者退出時儲存使用者的一些基本資料。當再次開啟程式時,是通過讀取該檔案來擷取之前的資訊。
說明:使用SharedPreferences存取資料
儲存key-value對一般要指定一個檔案名稱,然後用類似putString的方法指定key和value。SharedPreferences也採用了同樣的方法。使用SharedPreferences儲存key-value對的步驟如下:
(1)使用Activity類的getSharedPreferences方法獲得SharedPreferences對象。其中儲存key-value的檔案名稱的名稱由getSharedPreferences方法的第一個參數指定。
(2)使用SharedPreferences介面的edit獲得SharedPreferences.Editor對象。
(3)通過SharedPreferences.Editor介面的putXXX方法儲存key-value對。其中XXX表示value的不同資料類型。Boolean類型的value則是用putBoolean方法,字串類型的則為putString方法。
(4)
通過SharedPreferences.Editor介面的commit方法儲存key-value對。Commit方法相當於資料庫事務中的提交
(commit)操作。只有在事件結束後進行提交,才會將資料真正儲存在資料庫中。儲存key-value也是一樣。