儲存資料-Shared Preferences
話先說在前頭
- 另外這是一篇筆記,不是一篇教學,所以我不會寫上所有的方式,我只會寫我用的方法。
- 本篇文章是參照[深入淺出 Android -- Google 手持設備應用程式設計入門]跟著做的,所以可能會省略一些說明,詳情請參閱原本的文章。
基本上到了我們這個年紀,身高不太會變化,所以現在我們要將身高儲存起來,這樣就不用每次都要輸入了。
順便一提的是儲存資料有下列幾種方式:
用 key-value 的方式儲存
儲存在裝置的內部記憶體,應該是指ROM吧!
今天要用的是Shared Preferences這種方式。
首先我們要先import SharedPreferences進來。
import android.content.SharedPreferences;
然後新增三個變數,用來儲存身高的數字。
- private static final String TAG = "Bmi";
- public static final String PREF = "BMI_PREF";
- public static final String PREF_HEIGHT = "BMI_Height";
在 onCreate 我們要回復上次輸入的值,所以這邊我們多呼叫了 restorePrefs();
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findViews();
- restorePrefs();
- setListeners();
- }
在 restorePrefs()我們要做的就是將之前存入的數字讀出來,我們先宣告一個 SharedPreferences 型態的變數來讀取 PREF 的值。然後用 getString 來取得 PREF_HEIGHT 的數字,如果沒有的話就給空字串;如果有的話就塞入身高的欄位,並且讓體重那個欄位取的focus。這就是 25~34 行所做的事情。
- private void restorePrefs() {
- // TODO Auto-generated method stub
- SharedPreferences settings = getSharedPreferences(PREF, 0);
- String pref_height = settings.getString(PREF_HEIGHT, "");
- if(! "".equals(pref_height))
- {
- fieldHeight.setText(pref_height);
- fieldWeight.requestFocus();
- }
- }
在 onPause() 的時候我們要把身高儲存到 SharedPreferences 裡面去。所以我們先宣告一個 SharedPreferences 型態的變數來寫入 PREF 的值。呼叫 .edit() 跟 .putString() 來將 PREF_HEIGHT 的變數塞入身高的值。最後再 .commit() 起來。
- protected void onPause(){
- super.onPause();
- SharedPreferences settings = getSharedPreferences(PREF, 0);
- settings.edit()
- .putString(PREF_HEIGHT, fieldHeight.getText().toString())
- .commit();
- }
全部的新增的程式如下面所示。
- import android.content.SharedPreferences;
- public class Bmi2 extends Activity {
- private static final String TAG = "Bmi";
- public static final String PREF = "BMI_PREF";
- public static final String PREF_HEIGHT = "BMI_Height";
- private View btnCalc;
- private TextView fieldHeight;
- private TextView fieldWeight;
- private TextView result;
- private TextView fieldSuggest;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findViews();
- restorePrefs();
- setListeners();
- }
- private void restorePrefs() {
- // TODO Auto-generated method stub
- SharedPreferences settings = getSharedPreferences(PREF, 0);
- String pref_height = settings.getString(PREF_HEIGHT, "");
- if(! "".equals(pref_height))
- {
- fieldHeight.setText(pref_height);
- fieldWeight.requestFocus();
- }
- }
- @Override
- protected void onPause(){
- super.onPause();
- SharedPreferences settings = getSharedPreferences(PREF, 0);
- settings.edit()
- .putString(PREF_HEIGHT, fieldHeight.getText().toString())
- .commit();
- }
當我們再次執行BIM的程式的時候,程式就會自動取得上次輸入的數字,並且直接要你輸入體重。