對於一個應用程式來說有時候會需要記錄使用者的一些設定 , 例如玩遊戲的分數記錄或是靜音是否開啟之類的訊息 , 在Android Developers的網頁有一篇關於Data Storage的文章 , 裡面了介紹了幾種關於儲存資料的方法 , 如果只是要儲存一些primitive data ex. boolean , string , long , int之類的話 , 可以使用SharedPreferences方便多了 , 而當使用者離開程式或是被迫中斷的時候 , 我們必須做儲存資料的動作 , 而等到使用者再執行程式時我們再把資料取出來 , 這邊可以參考 Activity Lifecycle , 來決定override哪些函式達到資料 存 取的目的。
首先是程式碼的部分 , 簡單的用來記錄一個CheckBox勾選的狀態
package com.android; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.widget.CheckBox; public class TestDec extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CB = (CheckBox) findViewById(R.id.CheckBox); } boolean CheckBoxStatus; CheckBox CB; final String PreferencesName = "urPreferencesName"; @Override protected void onStart() { super.onStart(); SharedPreferences settings = getSharedPreferences(PreferencesName, MODE_PRIVATE); //透過Context類別下的 getSharedPreferences(String name, int mode) method //取出 名為name 的 SharedPreferences , 如果不存在的話會幫你create一個 //mode是存取的權限 , 預設為MODE_PRIVATE : 只有此應用程式可以存取 CheckBoxStatus = settings.getBoolean("CheckBoxStatus", false); //從中取出名為CheckBoxStatus的布林值 , 如果不存在的話預設傳回false CB.setChecked(CheckBoxStatus); } @Override protected void onStop() { super.onStop(); SharedPreferences settings = getSharedPreferences(PreferencesName, MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("CheckBoxStatus", CB.isChecked()); //名稱同樣為 CheckBoxStatus editor.commit(); } }
這麼一來當使用者按back鍵離開之後也不會遺失資料了
沒有留言:
張貼留言