SharedPreferences - Data保持

今日はSharedPreferencesでDataの保持に関してMemoします。

SharedPreferencesとは

アプリケーションが終了しても保存したいdataが在る場合、SharedPreferenceを利用し手軽にdataを保持・再取得することが出来ます。

Dataの保存

  1. SharedPreferences#edit() methodでSharedPreferences.Editor objectを取得する
  2. Editor#put~ methodでKeyに対する値を設定する(dataの型はBoolean, int, float, long, String)
  3. Editor#commit()で設定したdataをfileに保存する

Dataの取得

  1. Context#getSharedPreferences(String, int)でSharedPreferences objectを取得
    • 第一引数のStringにはdataを保持するfile名を
    • 第二引数のintには*operating modeを指定
  2. 型に合わせたget~ methodでKeyをもとに保存したdataを取得する

*Operating Modeは下記

Operating Mode Description
MODE_PRIVATE 外部のアプリからはアクセスできない
MODE_WORLD_READABLE 外部のアプリから読み取り可能
MODE_WORLD_WRITABLE 外部のアプリから書き込み可能

んで実装

今回は、SharedPreferencesをwrappingするclassを作成してます。
前回のHandlerを学習する時に作成したcodeから後で利用したい思います。

package com.android.practice;

import android.content.Context;
import android.content.SharedPreferences;

public class GameSettings {
	
	private static final String MODE_SETTINGS = "mode_settings";
	
	public static final String CLEAR_HIT_COUNT_LEVEL = "Clear hit counts";
	public static final int CLEAR_HIT_COUNT_LEVEL_INDEX = 0;
	public static final int CLEAR_HIT_COUNT_LEVEL_EASY = 5;
	public static final int CLEAR_HIT_COUNT_LEVEL_NORMAL = 10;
	public static final int CLEAR_HIT_COUNT_LEVEL_HARD = 15;
	
	public static final String SPEED_LEVEL = "Speed";
	public static final int SPEED_LEVEL_INDEX = 1;
	public static final int SPEED_LEVEL_EASY = 5;
	public static final int SPEED_LEVEL_NORMAL = 10;
	public static final int SPEED_LEVEL_HARD = 15;
	
	public static final int INIT_SPEED = 5;
	
	public static final String[] SETTING_ITEMS = {CLEAR_HIT_COUNT_LEVEL, SPEED_LEVEL};
	
	private Context mContext;
	private SharedPreferences mSettings;
	private SharedPreferences.Editor mSettingsEditor;
	
	public GameSettings(Context context){
		mContext = context;
                //Context#getSharedPreferences(String, int)でSharedPreferences objectを取得
		mSettings = mContext.getSharedPreferences(MODE_SETTINGS, Context.MODE_PRIVATE);
        //SharedPreferences#edit() methodでSharedPreferences.Editor objectを取得する
		mSettingsEditor = mSettings.edit();
	}
	
	public int getClearHitCountLevel(){
                //型に合わせたget~ methodでKeyをもとに保存したdataを取得する
		return mSettings.getInt(CLEAR_HIT_COUNT_LEVEL, CLEAR_HIT_COUNT_LEVEL_NORMAL);
	}
	
	public int getSpeedLevel(){
                //型に合わせたget~ methodでKeyをもとに保存したdataを取得する
		return mSettings.getInt(SPEED_LEVEL, SPEED_LEVEL_NORMAL);
	}
	
	public void setClearHitCountLevel(int clearHitCountLevel){
                //Editor#put~ methodでKeyに対する値を設定する
		mSettingsEditor.putInt(CLEAR_HIT_COUNT_LEVEL, clearHitCountLevel);
	}
	
	public void setSpeedLevel(int speedLevel){
                //Editor#put~ methodでKeyに対する値を設定する
		mSettingsEditor.putInt(CLEAR_HIT_COUNT_LEVEL, speedLevel);
	}
	
	public void commit(){
        //Editor#commit()で設定したdataをfileに保存する
		mSettingsEditor.commit();
	}
}

今後、前回(Handlerの回)、作成したものに設定画面を追加したいと考えてます。その際、SharedPreferencesが必要になってきます。

HashTag #android