Android數據存儲之SharedPreferences方式

 

在Android中,可供選擇的存儲方式有SharedPreferences、文件存儲、SQLite數據庫方式、內容提供器(Content provider)和網絡。

今兒個咱學SharedPreferences:

有些時候,應用程序有少量的數據需要保存,而且這些數據的格式很簡單:都是普通的字符串、標量類型的值等,比如應用程序的各種配置信息、小遊戲的於玩家積分等,對於這種數據,提供了SharedPreferences進行保存;可以想象它是一個小小的Cookie,它通過用鍵值對的方式把簡單數據類型(boolean、int、float、long和String)存儲在應用程序的私有目錄下(data/data/包名/shared_prefs/)自己定義的xml文件中。

1、說明

它提供一種輕量級的數據存儲方式,通過eidt()方法來修改裏面的內容,通過Commit()方法來提交修改後的內容。

2、重要方法

public abstract boolean contains (Stringkey) :檢查是否已存在該文件,其中key是xml的文件名。

edit():爲preferences創建一個編輯器Editor,通過創建的Editor可以修改preferences裏面的數據,但必須執行commit()方法。

getAll():返回preferences裏面的多有數據。

getBoolean(String key, boolean defValue):獲取Boolean型數據

getFloat(String key, float defValue):獲取Float型數據

getInt(String key, int defValue):獲取Int型數據

getLong(String key, long defValue):獲取Long型數據

getString(String key, String defValue):獲取String型數據

registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):註冊一個當preference發生改變時被調用的回調函數。

unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):刪除當前回調函數。

3、重要接口SharedPreferences.Editor

用於修改SharedPreferences對象的內容,所有更改都是在編輯器所做的批處理,而不是複製回原來的SharedPreferences或持久化存儲,直到你調用commit(),纔將持久化存儲。重要方法:

clear():清除內容。

  commit():提交修改

  remove(String key):刪除preference

下面通過一個簡單的實例來示範如何向SharedPreferences中寫入、讀取數據;

佈局文件很簡單:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="horizontal"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:gravity="center_horizontal"  
  7.     >  
  8. <Button   
  9.     android:id="@+id/write"  
  10.     android:layout_width="wrap_content"   
  11.     android:layout_height="wrap_content"   
  12.     android:text="@string/write"  
  13.     />  
  14. <Button   
  15.     android:id="@+id/read"  
  16.     android:layout_width="wrap_content"   
  17.     android:layout_height="wrap_content"   
  18.     android:text="@string/read"  
  19.     />     
  20. </LinearLayout>  


程序代碼如下:       

 

  1. package org.crazyit.io;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.SharedPreferences;  
  8. import android.os.Bundle;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.Button;  
  12. import android.widget.Toast;  
  13. public class SharedPreferencesTest extends Activity  
  14. {  
  15.     SharedPreferences preferences;  
  16.     SharedPreferences.Editor editor;  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState)  
  20.     {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         // 獲取只能被本應用程序讀、寫的SharedPreferences對象   
  24.         preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);  
  25.         editor = preferences.edit();  
  26.         Button read = (Button) findViewById(R.id.read);  
  27.         Button write = (Button) findViewById(R.id.write);  
  28.         read.setOnClickListener(new OnClickListener()  
  29.         {  
  30.             @Override  
  31.             public void onClick(View arg0)  
  32.             {  
  33.                 //讀取字符串數據   
  34.                 String time = preferences.getString("time"null);  
  35.                 //讀取int類型的數據   
  36.                 int randNum = preferences.getInt("random"0);  
  37.                 String result = time == null ? "您暫時還未寫入數據"  
  38.                     : "寫入時間爲:" + time   
  39.                     + "\n上次生成的隨機數爲:" + randNum;  
  40.                 //使用Toast提示信息   
  41.                 Toast.makeText(SharedPreferencesTest.this ,   
  42.                     result , 5000)  
  43.                     .show();  
  44.             }  
  45.         });  
  46.         write.setOnClickListener(new OnClickListener()  
  47.         {  
  48.             @Override  
  49.             public void onClick(View arg0)  
  50.             {  
  51.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "  
  52.                     + "hh:mm:ss");  
  53.                 // 存入當前時間   
  54.                 editor.putString("time", sdf.format(new Date()));  
  55.                 // 存入一個隨機數   
  56.                 editor.putInt("random", (int) (Math.random() * 100));  
  57.                 // 提交所有存入的數據   
  58.                 editor.commit();  
  59.             }  
  60.         });  
  61.     }  
  62. }     
該程序就是簡單的實現寫入數據讀取數據;

簡單的界面如下圖:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章