基本情報
SharedPreferencesはデバイス内にデータを保存するための仕組みです。
保存されたデータはActivityが終了しても保持されるので、基本的にはアプリの設定を保存するために用いられます。
保存できるデータは以下の5つです。
- String型
- boolean型
- int型
- long型
- float型
インスタンスの取得方法
インスタンスの取得方法には以下の3つのメソッドがあります。
- Context#getPreferences(int)
- Context#getSharedPreferences(String, int)
- PreferenceManager#getDefaultSharedPreferences(Context)
ではそれぞれの使い方について見ていきましょう
Context#getPreferences(int)
SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
引数でモードを渡します。
他にMODE_WORLD_READABLE / MODE_WORLD_WRITEABLE / MODE_MULTI_PROCESSがありますが、モードについては後述します。
Context#getSharedPreferences(String, int)
SharedPreferences prefs = getSharedPreferences("SaveData", Context.MODE_PRIVATE);
引数で保存データの名前とモードを渡します。
PreferenceManager#getDefaultSharedPreferences(Context)
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
*getDefaultSharedPreferencesで作成したSharedPreferencesのモードはデフォルトでMODE_PRIVATEです。
データの書き込み
SharedPreferences.Editor editor = prefs.edit();
editor.putString("string", "value");
editor.putBoolean("boolean", false);
editor.putInt("int", 0);
editor.putLong("long", 0);
editor.putFloat("float", 0.0);
editor.apply();
それぞれのデータ形式に対応するputメソッドの引数にKey=Vakue形式でデータを書き込み、最後にapply(保存)をします。
データの読み込み
String str = prefs.getString("string");
boolean bool = prefs.getBoolean("boolean");
int intNum = prefs.getInt("int");
long longNum = prefs.getLong("long");
float floatNum = prefs.getFloat("float");
それぞれのデータ形式に対応するgetメソッドの引数に保存した際のKeyを渡し取得します。
保存したデータ
ファイルパス
/data/data/[パッケージ名]/shared_prefs/
ファイル名
getPreferences(int)で作成した場合
[Activityのクラス名].xml
getSharedPreferences("SaveData", int)で作成した場合
SaveData.xml
getDefaultSharedPreferences(Context)で作成した場合
[パッケージ名]_preferences.xml
形式
XML形式で保存されます。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="string">value</string>
<boolean name="boolean" value="false" />
<int name="int" value="0" />
<long name="long" value="0" />
<float name="float" value="0.0" />
</map>
保存したデータのモードについて
モード名 | 効果 | 備考 |
---|---|---|
MODE_PRIVATE | 自アプリのみ読み書き可能 | |
MODE_WORLD_READABLE | 他アプリから読み取り可能 | API Level17で非推奨 |
MODE_WORLD_WRITEABLE | 他アプリから書き込み可能 | API Level17で非推奨 |
MODE_MULTI_PROCESS | 複数のプロセスで読み書き可能 | API Level23で非推奨 |