SharedPrefereceを使ったアプリ設定の保存

アプリの設定など一度アプリを閉じたとしても保存しておきたいデータはSharedPreferencesクラスによってプリファレンス(設定ファイル)に保存することができます。

このクラスはファイルに設定データを保存するだけですが、ファイルストリームを使う場合に比べて楽にデータを取り出せます。

データを書き込む

データを書き込む処理は次のようになります。

public class MainActivity extends Activity
{

    SharedPreferences prefs;

    String saveData = "";
        //プリファランスに書き込むデータ
    final String DATA_KEY = "SaveData";
        //書き込むデータのキー
    
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //プリファレンスを取得する。
         prefs = PreferenceManager.getDefaultSharedPreferences(this);
        
        writePreferences();
    }
    
    //データを書き込む
    public void writePreferences()
    {
        EditText edit_text = (EditText)findViewById(R.id.edit_text);
        saveData = edit_text.getText().toString();
        
        //エディターで値を書き込む
        SharedPreferences.Editor prefEditor = prefs.edit();
        prefEditor.putInt(DATA_KEY, saveData);
        prefEditor.commit();
            //変更内容を反映
    }
}

getDefaultSharedPreferencesメソッドでデフォルトのプリファレスを取得しています。

次にSharedPreferences.Editorインスタンスを取得してputIntなどの値書き込みメソッドを使ってキーにデータを書き込みます。

ここではDATA_KEYがデータのキーで、saveDataが書き込みたい文字列のデータです。

書きこめるできるデータの種類はboolean, int, long, float, Stringなどプリミティブ型を含むデータで、読み込むときも同じです。

データはxmlファイルとして自分のアプリのあるデータ領域に保存されています。DDMSの「File Explorer」を探せばそのxmlファイルが見つかります。ちなみにこの例では次のようなxmlファイルが作られました。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="SaveData" value="ABCDEF" />
</map>

このxmlファイルではSaveDataというキーを持つstring型のデータが"ABCDEF"であることが書かれています。

データを読み込む

データを書き込んだ次はデータを読み込みます。例えば、先ほど書き込んだデータを読み込むには次のようにします。

public class MainActivity extends Activity
{
    
    SharedPreferences prefs;
    String saveData = "";
    final String DATA_KEY = "SaveData";
    
    public void onCreate(Bundle savedInstanceState)
    {    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        /*中略*/
        
        saveData = prefs.getString(DATA_KEY, "no data");
        Log.i("MainActivity : ", "saveData = " + saveData);
    }
}

これだけで指定のキーからデータを得ることができます。

getStringメソッドなどを使って指定のキー(ここではDATA_KEY)のデータを読み込み、2つめの引数にはキーが登録されていなかった場合に返されるデータ(ここでは"no data")を指定します。

キーの削除

プリファレンスで登録したキーが不要になって削除する場合には次のようなコードで削除できます。

SharedPreferences.Editor pref_editor = prefs.edit();
prefEditor.remove(DATA_KEY);
prefEditor.commit();

やっていることはデータの書き込みの時と同じくエディターを取得し、removeメソッドでキーを削除するだけです。

複数の設定ファイルを作る方法

もし設定ファイルを1つだけではなく複数のファイルに分けて保存したいときは次のようなコードを呼び出します。

SharedPreferences prefs1;
String PREFS_TAG1 = "PREFERENCES1";
    //設定ファイル1のファイル名
SharedPreferences prefs2;
String PREFS_TAG2 = "PREFERENCES2";
    //設定ファイル2のファイル名

prefs1 = getSharedPreferences(PREFS_TAG1, Context.MODE_PRIVATE);
    //1つめの設定ファイルを作成
prefs2 = getSharedPreferences(PREFS_TAG2, Context.MODE_PRIVATE);
    //2つめの設定ファイルを作成

Context#getSharedPreferencesメソッドに設定ファイルの名前モードを指定します。

セキュリティ上、モードMODE_PRIVATEにした方が良いみたいです。

関連項目
プライバシーポリシー