ゲームなんかのプレイ・データを保存するには、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ファイルごと消してしまう方法もある。
しかしその場合、すぐには反映されず、アプリの再起動が必要となるようだ。