對於一個應用程式來說有時候會需要記錄使用者的一些設定 , 例如玩遊戲的分數記錄或是靜音是否開啟之類的訊息 , 在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鍵離開之後也不會遺失資料了
沒有留言:
張貼留言