Android應用中使用SharedPreferences類儲存資料的方法_Android

來源:互聯網
上載者:User

在Android系統中提供了多種儲存技術.通過這些儲存技術可以將資料存放區在各種儲存介質上.比如sharedpreferences可以將資料儲存著應用軟體的私人儲存區,這些儲存區的資料只能被寫入這些資料的軟體讀取.當然Android還支援檔案儲存體、SQLite資料庫和Content Provider。在這裡我們將對sharedpreferences儲存方式進行介紹。

SharedPreferences是一種輕量級的資料存放區方式,學過Web開發的同學,可以想象它是一個小小的Cookie。它可以用索引值對的方式把單一資料型別(boolean、int、float、long和String)儲存在應用程式的私人目錄下(data/data/包名 /shared_prefs/)自己定義的xml檔案中。

SharedPreferences是以索引值對來儲存應用程式的配置資訊的一種方式,它只能儲存基礎資料型別 (Elementary Data Type)。一個程式的設定檔僅可以在本應用程式中使用,或者說只能在同一個包內使用,不能在不同的包之間使用。實際上sharedPreferences是採用了XML格式將資料存放區到裝置中,在DDMS中的File Explorer中的/data/data//shares_prefs下。

在所有的Android SDK儲存技術中SharedPreferences技術是最容易理解和使用的,因為SharedPreferences處理的就是一個key–value對。比如儲存產品的名稱,就可以將key設為produceName,value為實際的產品名。

一、擷取SharedPreferences對象的方法

(1)通過函數Context.getSharedPreferences(String name,int mode),其中name為本組件的設定檔名(如果想要與本應用程式的其他組件共用此設定檔,可以用這個名字來檢索到這個設定檔),mode為操作模式,預設的模式為0或MODE_PRIVATE;傳回值為SharedPreferences。

(2)通過函數Activity.getPreferences(int mode),其中設定檔僅可以被調用的Activity使用。mode為操作模式,預設的模式為0或MODE_PRIVATE;傳回值為SharedPreferences。

二、使用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也是一樣。

三、資料的儲存位置和格式

SharedPreferences將資料檔案寫在手機記憶體私人的目錄中。在模擬器中測試程式可以通過ADT的DDMS透視圖來查看資料檔案的位置。

四、儲存較為複雜的類型的資料

前面介紹的SharedPreferences只能儲存簡單類型的資料,例如,string,int等。如果需要存取比較複雜的資料類型比如類或者映像,則需要對這些資料進行編碼,通常將其轉換成Base64編碼,然後將轉換後的資料以字串的形式儲存在XML檔案中。

五、設定資料檔案的存取權限

因為Android系統並不是完全的創新的作業系統,而是在linux核心基礎上發展起來的一個移動作業系統,所以android還有一些linux的基本特性。我們用getsharedPreferences方法獲得sharedpreferences對象,getsharedPreferences方法的第2個參數值使用到了Activity.MODE_PRIVATE常量。除了這個常量以外還可以使用另外3個常量。這4個常量用於指定檔案的建立模式。他們一個重要的功能就是設定檔案的屬性,從而可以設定資料檔案的存取權限。

六、可以儲存設定的Activity:PreferenceActivity

由於SharedPreferences可以很容易的儲存key-value對,因此,通常使用SharedPreferences儲存配置資訊。不過Android SDK提供了更為容易的方法來設計配置介面,並且可以透明地儲存配置資訊。這就是PreferenceActivity。

PreferenceActivity是Activity的子類,該類封裝了SharedPreferences。因此,PreferenceActivity的所有子類都擁有儲存key-value對的能力。

PreferenceActivity提供了一些常用的設定項,這些設定項可以滿足大多數的配置介面的要求。與組件一樣,這些配置項既可以從XML檔案建立,也可以從代碼建立。比較常用的有:

CheckboxPreference:對應標籤。該設定項會建立一個CheckBox組件。
EditTextPreference:對應標籤。單擊該設定項會彈出一個帶EditText組件的對話方塊。
ListPreference:對應標籤。單擊該設定項會彈出帶ListView組件的對話方塊。


樣本
先上圖:

然後是main.xml

<?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:id="@+id/textView"   /> </LinearLayout> 

activity的代碼:

package cn.com.sharedPreferencesTest;  import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.widget.TextView;  public class SharedPreferencesActivity extends Activity {   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     saveSharedPreferences();     readSharedPreferences();        }      /**    * @description 建立並儲存一些設定資訊    */   private void saveSharedPreferences(){     /*      * getSharedPreferences(String name,int mode)方法是在Context中定義的抽象方法,在ContextWrapper中進行了具體實現,      * 該方法會根據使用者傳遞的名稱和寫入類型建立一個SharedPreferences對象進行返回。      * 在Activity中,還有一個方法可以回去SharedPreferences對象,這個方法就是SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);      * 改方法在Activity中定義並實現,這裡沒有name參數是因為該方法預設將當前Activity的類名作為name屬性(這裡的類名並不包含包路徑哦)      * */     SharedPreferences sharedPreferences = getSharedPreferences("preferences", MODE_PRIVATE);          //儲存資料     SharedPreferences.Editor editor = sharedPreferences.edit();     editor.putString("name", "蔡依林");     editor.putInt("age", 31);     Boolean b = editor.commit();          if(b){       Log.i("通知:", "儲存成功!");     }else{       Log.i("通知", "儲存失敗!");     }        }      /**    * @author chenzheng_java    * @description 讀取我們添加到SharedPreference對象中的資料    * @since 2011/03/05    */   private void readSharedPreferences(){     String result = "美女資訊:/n" ;     SharedPreferences sharedPreferences = this.getSharedPreferences("preferences", MODE_PRIVATE);     result+=" 姓名 "+sharedPreferences.getString("name", "暫時沒有人");     result+=" 年齡"+sharedPreferences.getInt("age", -1);     TextView textView = (TextView)findViewById(R.id.textView);     textView.setText(result);        }       } 

其他的都為預設。

相關文章

聯繫我們

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