Android資料存放區方式之SharedPreferences

來源:互聯網
上載者:User

在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也是一樣。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.