2010年9月12日 星期日

儲存資料-Shared Preferences

儲存資料-Shared Preferences

話先說在前頭



基本上到了我們這個年紀,身高不太會變化,所以現在我們要將身高儲存起來,這樣就不用每次都要輸入了。
順便一提的是儲存資料有下列幾種方式:

用 key-value 的方式儲存


儲存在裝置的內部記憶體,應該是指ROM吧!


儲存在外部的記憶體,應該是SD卡。 


儲存在資料庫裏面


將資料儲存在網路的伺服器。

今天要用的是Shared Preferences這種方式。

首先我們要先import SharedPreferences進來。
import android.content.SharedPreferences;

然後新增三個變數,用來儲存身高的數字。
  1. private static final String TAG = "Bmi";
  2. public static final String PREF = "BMI_PREF";
  3. public static final String PREF_HEIGHT = "BMI_Height";


在 onCreate 我們要回復上次輸入的值,所以這邊我們多呼叫了 restorePrefs(); 
  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3.        setContentView(R.layout.main);
  4.       
  5.        findViews();
  6.        restorePrefs();
  7.        setListeners();
  8.     }   


在 restorePrefs()我們要做的就是將之前存入的數字讀出來,我們先宣告一個 SharedPreferences 型態的變數來讀取 PREF 的值。然後用 getString 來取得 PREF_HEIGHT 的數字,如果沒有的話就給空字串;如果有的話就塞入身高的欄位,並且讓體重那個欄位取的focus。這就是 25~34 行所做的事情。
  1.     private void restorePrefs() {
  2.        // TODO Auto-generated method stub
  3.         SharedPreferences settings = getSharedPreferences(PREF, 0);
  4.         String pref_height = settings.getString(PREF_HEIGHT, "");
  5.        if(! "".equals(pref_height))
  6.        {
  7.            fieldHeight.setText(pref_height);
  8.            fieldWeight.requestFocus();
  9.        }
  10.     }


在 onPause() 的時候我們要把身高儲存到 SharedPreferences 裡面去。所以我們先宣告一個 SharedPreferences 型態的變數來寫入 PREF 的值。呼叫 .edit() 跟 .putString() 來將 PREF_HEIGHT 的變數塞入身高的值。最後再 .commit() 起來。
  1.     protected void onPause(){
  2.         super.onPause();
  3.    
  4.         SharedPreferences settings = getSharedPreferences(PREF, 0);
  5.         settings.edit()
  6.          .putString(PREF_HEIGHT, fieldHeight.getText().toString())
  7.          .commit();
  8.     }


全部的新增的程式如下面所示。
  1. import android.content.SharedPreferences;

  2. public class Bmi2 extends Activity {
  3.     private static final String TAG = "Bmi";
  4.     public static final String PREF = "BMI_PREF";
  5.     public static final String PREF_HEIGHT = "BMI_Height";
  6.    
  7.     private View btnCalc;
  8.     private TextView fieldHeight;
  9.     private TextView fieldWeight;
  10.     private TextView result;
  11.     private TextView fieldSuggest;

  12.     /** Called when the activity is first created. */
  13.     @Override
  14.     public void onCreate(Bundle savedInstanceState) {
  15.        super.onCreate(savedInstanceState);
  16.        setContentView(R.layout.main);
  17.       
  18.        findViews();
  19.        restorePrefs();
  20.        setListeners();
  21.     }   
  22.    
  23.     private void restorePrefs() {
  24.        // TODO Auto-generated method stub
  25.         SharedPreferences settings = getSharedPreferences(PREF, 0);
  26.         String pref_height = settings.getString(PREF_HEIGHT, "");
  27.        if(! "".equals(pref_height))
  28.        {
  29.            fieldHeight.setText(pref_height);
  30.            fieldWeight.requestFocus();
  31.        }
  32.     }

  33.     @Override
  34.     protected void onPause(){
  35.         super.onPause();
  36.    
  37.         SharedPreferences settings = getSharedPreferences(PREF, 0);
  38.         settings.edit()
  39.          .putString(PREF_HEIGHT, fieldHeight.getText().toString())
  40.          .commit();
  41.     }


當我們再次執行BIM的程式的時候,程式就會自動取得上次輸入的數字,並且直接要你輸入體重。


沒有留言:

張貼留言