SharedPreferences ~セーブとロード

 ゲームなんかのプレイ・データを保存するには、SharedPreferences がラクでいいね。
 扱いも簡単だし、書き込み/読み込み順番とか気にしなくてもいい。

データの書き込み

 下記、例では指定したファイル(xmlName)に、3つのデータを書き込んでいる。

	// write
	public void write_xml( String xmlName ,int i, String key, String key2 ) {
		// MODE_WORLD_READABLE:他のアプリから読み取り可能
		// MODE_WORLD_WRITEABLE:他のアプリから書込み可能
		// MODE_PRIVATE:当アプリのみ使用可能

		SharedPreferences pref =
			getSharedPreferences( xmlName, MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE );
		Editor edit = pref.edit();
		
		edit.putInt( "score", i );
		edit.putString( "key", key );
		edit.putString( "key2", key2 );
		
		edit.commit();
	}

 まず、getSharedPreferences で、書き込むファイルを取得する。
 引数のxmlName には、xmlのファイル名を指定する。
 ただし、拡張子はつけない。
 pref.xml だとしたら、”pref” となる。

 次に、Editor を取得する。
 書き込みは、このEditor を介して行われる。

 書き込み内容の設定は、putInt などを使う。

	edit.putInt( "score", i );
		第一引数 : データ名
		第二引数 : データの値

 putIntの他にも、putString, putBoolean, putLong, putFloat が使える。

 設定をしたら、commit() でファイルに書き込む。

 ちなみに、commit() と同じ役割のapply() がある。
 違いは結果を返すか、返さないか。
 commit() だと boolean を返してくれるので、その値を調べれば成功したかがわかる。

データの読み込み

 下記、例では指定したファイル(xmlName)から、3つのデータを読み込んでいる。

	// Read
	public void read_xml( String xmlName ) {
		
		SharedPreferences pref =
			getSharedPreferences( xmlName, MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE );
		
		int i = pref.getInt( "score", 0 );
		String str = pref.getString( "key", "" );
		String str2 = pref.getString( "key2", "" );

	Log.d( "TEST", "read | score :" +i +" key:"+str +" key2:"+str2 );
	}

 手順は、書き込みの時とほぼ同じ。
 method の第二引数は、デフォルト値となる。
 なにかの原因で読み込めなかった場合、この値が返ってくる。

データの削除

 すべてのデータを削除するには、下記のようになる。

	// clear
	public void delete_data( String xmlName ) {
		SharedPreferences pref =
			getSharedPreferences( xmlName, MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE );
		Editor editor = pref.edit();
		editor.clear();	// all clear
		editor.commit();
		//--	
	}

 editor を取得して、clear()。その後、commit() を行う。
 commit() をしないと、反映されないので注意。
 データを指定して消す場合は、remove を使う。

	remove( String key );

 なお、全削除には、xmlファイルごと消してしまう方法もある。
 しかしその場合、すぐには反映されず、アプリの再起動が必要となるようだ。

Comments are closed.