動かざることバグの如し

近づきたいよ 君の理想に

Preferenceでデータを簡単に保存する

そもそもPreferenceとは

Androidアプリで使える簡易的データ保存方法。
アプリがデータを保存する方法として大きく以下の様な方法があるとのこと。

  • ファイルとして保存
  • データベース(SQLite)で保存
  • Preferenceで保存

一番基本はファイルで保存、データが多かったり複雑な処理等を要する場合はデータベースを使うべきだが、一番楽にそしてシンプルにデータを保存したければPreference一択。

実際に使ってみる

マジでシンプルだからそのまま載せとく。データはキーとバリューが一緒になって保存される。

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button saveButton = (Button)findViewById(R.id.saveBtn);
		saveButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				saveButtonClick();
			}
		});

		Button loadButton = (Button)findViewById(R.id.loadBtn);
		loadButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				loadButtonClick();
			}
		});
	}
	public void saveButtonClick(){
		EditText editText = (EditText)findViewById(R.id.editText1);
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		sp.edit().putString("SaveString", editText.getText().toString()).commit();
	}
	public void loadButtonClick(){
		EditText editText = (EditText)findViewById(R.id.editText1);
		SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
		editText.setText(sp.getString("SaveString", null), BufferType.NORMAL);
	}
}

上のサンプルコードのsaveButtonClickメソッド内のこの2行。

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
sp.edit().putString("SaveString", editText.getText().toString()).commit();

分解すると以下のことをしている。最後にcommitしてやらないと保存はされないので注意。

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor spEdit = sp.edit();
spEdit.putString("SaveString", editText.getText().toString());
spEdit.commit();

保存できる型は

大抵の型に対応してる。

  • boolean
  • float
  • int
  • long
  • String

保存先は

Preferenceのデータはxml形式で保存される。その保存先は「/data/data/パッケージ名/shared_prefs/」だが、機種によって一部異なるっぽい。
ちなみにこんな感じ。今回は「SaveString」がキーで、「テスト中」がバリュー(値)となっている。
f:id:thr3a:20130923115313p:plain

データを全削除したい

sp.edit().clear();