次のエントリ: 日記内の見出しに対応してみた [chalow]
Preferencesで設定値の読書き
2011-06-08-1 / カテゴリ: [Java][Android] / [permlink]
設定の読書き。というか備忘録。
SharedPreferencesインスタンス経由で読んで、SharedPreferences.Editor経由で書き込む。
PreferenceActivity(PreferenceScreen)はまたそのうち。
ContextクラスのgetSharedPreference()を使う。Activity内なんかだと
保存先は
modeはInteger値で
のどれかを指定する。
他アプリから読書きを許可する場合は MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE で 666 になる。
ActivityクラスのgetPreferences()を使う
中身はこんな感じになってる
PreferenceManagerクラスのgetDefaultSharedPreferences()で。
中身はこんな感じ
こんな感じ
出力される設定ファイルはこんな感じ
ちなみに、PreferenceActivity(設定画面)での併用をする場合、Integerでの書き込みはできないので、全部Stringで出力・取得する。
[2011-07-04-1]
クリアされるとこんな感じに。
行数指定対応したので、引用したソースは行数を一致させた 2011-06-20
SharedPreferencesインスタンス経由で読んで、SharedPreferences.Editor経由で書き込む。
PreferenceActivity(PreferenceScreen)はまたそのうち。
SharedPreferencesの取得
任意のプリファレンス名で取得
ContextクラスのgetSharedPreference()を使う。Activity内なんかだと
SharedPreferences pref = getSharedPreference(filename, mode);で取れ、保持対象のファイル名が、指定した filename になる。
保存先は
/data/data/パッケージ名/shared_prefs/filename.xmlになる(けど、パスは基本的に意識しない)
modeはInteger値で
MODE_PRIVATE | (デフォルト)他のアプリ(パッケージ)からはアクセス不可 | 660(rw-rw----) |
MODE_WORLD_READABLE | 他のアプリから読み込みのみ許可 | 664(rw-rw-r--) |
MODE_WORLD_WRITEABLE | 他のアプリから読書き許可 | 662(rw-rw--w-) |
他アプリから読書きを許可する場合は MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE で 666 になる。
Activity固有のプリファレンス
ActivityクラスのgetPreferences()を使う
SharedPreferences pref = getPreferences(mode);ファイル名は、呼出元のクラス名になるので、画面単位のプリファレンスとなる。
中身はこんな感じになってる
public SharedPreferences getPreferences(int mode) { return getSharedPreferences(getLocalClassName(), mode); }
アプリグローバルのプリファレンス
PreferenceManagerクラスのgetDefaultSharedPreferences()で。
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);これで、アプリ(パッケージ)共通のプリファレンスになる。
中身はこんな感じ
public static SharedPreferences getDefaultSharedPreferences(Context context) { return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode()); } private static String getDefaultSharedPreferencesName(Context context) { return context.getPackageName() + "_preferences"; } private static int getDefaultSharedPreferencesMode() { return Context.MODE_PRIVATE; }で、パッケージ名のプリファレンスになるため、ドコから読んでも同じ設定ファイルになる。
値の保存
SharedPreferences#edit()で取得するEditorインスタンスに対して書き込みを行う。こんな感じ
private String PREF_NAME = "name"; private String PREF_URL = "url"; private String PREF_SINCE = "since"; private String PREF_SSL = "usessl"; : String name = "戯術者の日記"; String url = "http://www.jp-z.jp/changelog/"; long since = System.currentTimeMillis(); boolean use_ssl = false; : SharedPreferences pref = getPreferences(MODE_PRIVATE); // SharedPreferencesインスタンスの取得は前述 Editor editor = pref.edit(); editor.putString(PREF_NAME, name); editor.putString(PREF_URL, url); editor.putLong(PREF_SINCE, since); editor.putBoolean(PREF_SSL, use_ssl); editor.commit();値の設定は putType(キー, 値) でセット(Typeは値の型)し、commit()で変更を確定する。
出力される設定ファイルはこんな感じ
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <boolean name="usessl" value="false" /> <string name="url">http://www.jp-z.jp/changelog/</string> <string name="name">戯術者の日記</string> <long name="since" value="1307539110435" /> </map>
値の取得
SharedPreferencesインスタンスのget系メソッドで取得する。SharedPreferences pref = getPreferences(MODE_PRIVATE); String name = pref.getString(PREF_NAME, "no name"); String url = pref.getString(PREF_URL, "no url"); long since = pref.getLong(PREF_SINCE, 0); boolean usessl = pref.getBoolean(PREF_SSL, false);型を間違えると ClassCastException が発生するので注意。
ちなみに、PreferenceActivity(設定画面)での併用をする場合、Integerでの書き込みはできないので、全部Stringで出力・取得する。
[2011-07-04-1]
値のクリア
プリファレンス値が保存されたxmlファイル自体の消去は無いけどSharedPreferences pref = getPreferences(MODE_PRIVATE); Editor editor = pref.edit(); editor.clear(); editor.commit();で、内容がクリアされる。
クリアされるとこんな感じに。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map />
行数指定対応したので、引用したソースは行数を一致させた 2011-06-20
Referrer (Inside):
[2011-07-03-1]
次のエントリ: 日記内の見出しに対応してみた [chalow]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12