Android: Preferenceで複数の設定を保持する
Androidでデータを永続化しようと思うといくつかの方法が考えられます
- テキストとかを普通にFileIO
- SQLite
- Preference
この中で一番簡単なのがPreferenceです
なんと専用のlayoutを用意すればデータの入力と保存を勝手にやってくれます
保存形式はXMLで、ファイル名は指定しなければデフォルト値(パッケージ名)が使用されます
今回の目的である複数の設定を保持したい場合には任意で指定することも可能です
※例えば、twitterのアカウント情報を複数保存したり
Preferenceを任意の名前で保存するサンプル
package net.yusukezzz.preferencetest;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class PreferenceTest extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = getIntent();
String filename = i.getStringExtra("filename");
getPreferenceManager().setSharedPreferencesName(filename);
addPreferencesFromResource(R.xml.setting);
}
}
で、res/xml/setting.xmlを用意すればOKです
実際にアカウント情報を保存する場合はsetSharedPreferencesModeでMODE_PRIVATEとか指定すればいいのかな?
XMLは /data/data/パッケージ名/shared_pref/filename.xml に保存されます
この例ではファイル名をIntentで渡しています
Preferenceで保存できるのはKey:Valueな値なので、もっと複雑なデータを保存したいという場合は他の手段の方がいいでしょう
また、PreferenceはEditText値は入力されている値を一覧できない(入力時しか見れない)のでユーザビリティは悪いと思います
最初は自力でXMLで保存しようと思ったのですが、
2.1以下のAndroidでDOMを保存するのが面倒(javax.xml.transformは2.2以降から)だったのと、
保存したいデータが単純なKey:Valueな値しかなかったということでPreferenceで済みました
一応、DOM以外にXMLを生成する手段としてserializerというのが用意されています(android.util.Xml)
java(Android)ってXMLの保存かなり面倒じゃないですか?transformとかserializerとか…読み出しは充実してるのに;