http://ajava.org/readbook/J2ME/androidkfysz/17348.html
首先介紹的是SharedPreferences,它是Android提供用來儲存一些簡單的配置資訊的一種機制,例如,一些預設歡迎語、登入的使用者名稱和密碼等。其以索引值對的方式儲存,使得我們可以很方便的讀取和存入,下面看一個示範的例子。
1.第一步
在Eclipse中開啟ex_SharedPreferences 項目,其步驟如下所示。
(1)建立一個項目。依次單擊File→New→Android Project項。
(2)在建立項目的對話方塊中,選擇Create project from existing source項。
(3)單擊瀏覽,找到ex_SharedPreferences項目,然後單擊確定。
其程式的目錄結構8-1所示。
2.第二步
單擊運行項目,可以看到主介面8-2所示,這個介面的布局資訊都在main.xml檔案當中,在一個LinearLayout當中放了3個TextView和兩個EditView組件,代碼如下所示:
▲ 圖8-1 程式目錄結構 ▲ 圖8-2 主介面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="SharedPreferences demo"
/>
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Name:" />
<EditText Android:id="@+id/name"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="" />
<TextView Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Password:" />
<EditText Android:id="@+id/password"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:password="true"
Android:text="" />
</LinearLayout>
代碼解釋:
如上代碼錶示,使用LinearLayout布局,其中放置3個用來做介面提示的文字框(TextView)組件和兩個用於輸入Name和Password(注意這裡使用了 Android:password="true")的編輯框(EditText)組件,運行這個應用,可以看到其介面8-2所示。
在圖8-2中,我們可以看到,初始狀態下兩個EditView都是空的,現在輸入一些字元,8-3所示。
8-3所示,我們在Name文字框中輸入IceskYsl,在Password文字框中輸入Password,然後退出這個應用。我們在應用程式列表中找到這個應用,重新啟動,可以看到其使用了前面輸入的Name和Password,8-4所示。
▲ 圖8-3 輸入Name和Password ▲ 圖8-4 重新啟動應用
由此可見,應用儲存了我們輸入的Name和Password,現在來看看其實現的代碼,在DBShared Preferences.java檔案中,此檔案的代碼如下所示:
package us.imnet.iceskysl.db;
import Android.app.Activity;
import Android.content.SharedPreferences;
import Android.os.Bundle;
import Android.widget.EditText;
public class DBSharedPreferences extends Activity {
public static final String SETTING_INFOS = "SETTING_Infos";
public static final String NAME = "NAME";
public static final String PASSWORD = "PASSWORD";
private EditText field_name; //接收使用者名稱的組件
private EditText filed_pass; //接收密碼的組件
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Find VIew
field_name = (EditText) findViewById(R.id.name); //首先擷取用來輸入使用者名稱的組件
filed_pass = (EditText) findViewById(R.id.password); //同時也需要擷取輸入密碼的組件
// Restore preferences
SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //擷取一個SharedPreferences對象
String name = settings.getString(NAME, ""); //取出儲存的NAME
String password = settings.getString(PASSWORD, ""); //取出儲存的PASSWORD
//Set value
field_name.setText(name); //將取出來的使用者名稱賦予field_name
filed_pass.setText(password); //將取出來的密碼賦予filed_pass
}
@Override
protected void onStop(){
super.onStop();
SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //首先擷取一個SharedPreferences對象
settings.edit()
.putString(NAME, field_name.getText().toString())
.putString(PASSWORD, filed_pass.getText().toString())
.commit();
} //將使用者名稱和密碼儲存進去
}
代碼解釋:
通過上述代碼可以看到,在onCreate中使用 findViewById得到兩個EditView後,使用getSharedPreferences取得SharedPreferences對象 settings,然後使用getString取得其中儲存的值,最後使用setText將其值設定為兩個EditText的值。
而在程式運行onStop過程,也就是在程式退出時,首先使用getSharedPreferences得到settings;然後調用edit()方法使其處於可以編輯狀態,並使用putString 將兩個EditText中的值儲存起來;最後使用commit()方法提交即可儲存。
小知識 |
SharedPreferences儲存到哪裡去了? SharedPreferences是以XML的格式以檔案的方式自動儲存的,在DDMS中的File Explorer中展開到/data/data/<package name>/shared_prefs下,以上面這個為例,可以看到一個叫做SETTING_Infos.xml的檔案,8-5所示。 |
▲ 圖8-5 SharedPreferences檔案
將其匯出到裝置中,可以開啟這個檔案,看到其代碼內容為:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="PASSWORD">Password</string>
<string name="NAME">IceskYsl</string>
</map>
小知識 |
我們可以通過「getXXX」函數,從 SharedPreferences中讀取不同類型的內容,例如,上面我們使用[getString]讀取String類型的內容。 |
注意 |
Preferences只能在同一個包內使用,不能在不同的包之間使用。 |
本文內容搜集於互連網,如有侵犯你的權利,請來信告知。