2010年12月3日 星期五

[Android] How to save primitive data by SharedPreferences


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

沒有留言:

張貼留言

Google Analytics