8.2 輕輕地我保護—SharedPreferences儲存

來源:互聯網
上載者:User

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只能在同一個包內使用,不能在不同的包之間使用。

本文內容搜集於互連網,如有侵犯你的權利,請來信告知。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.