【Android】SharedPreferencesの使い方

この記事は2015年10月30日に書かれたものです。内容が古い可能性がありますのでご注意ください。


アプリの簡易的な設定情報を保存しておいたり、
前回起動時からのバージョン更新をチェックして異なる動作をさせたり(
応用で初回起動時のみダイアログを出すとかも考えられますね)
そのような簡易的なデータを保存、参照したい場合にはプリファレンスという仕組みが有用です。

以前プッシュ通知の記事を書いた際にIDの保存とバージョン管理を行うためにも用いました。コレです。

当記事ではandroidでこの仕組みを用いる方法について説明したいと思います。

SharedPreferences

プリファレンスを扱うためには、SharedPreferencesというクラスを用います。
これを用いるとデータは保存先[/data/data/”パッケージ名”/shared_prefs]下のxmlファイルに
永続的に保存されます。(アプリが終了・再起動しても保持され、またアプリがアンインストールされると削除されます。)

使えるデータ型はint , long ,float ,String , boolean の五つで
“キー”と”バリュー”をによる連想配列のような形で保存されます。

データの保存

データを扱うにはまずContext#getSharedPreferences(String name, int mode)によりSharedPreferencesオブジェクトを取得します。

SharedPreferences preferences = getSharedPreferences("preferenceSample", MODE_PRIVATE);

第一引数はプリファレンスのファイル名、第二引数はファイル作成時の動作モードです。
動作モードは以下の三つのContextクラスの定数を指定できます。

MODE_PRIVATE 呼び出したアプリケーションのみアクセスできる
MODE_WORLD_READABLE 他のアプリケーションが読み込みできる
MODE_WORLD_WRITEABLE 他のアプリケーションが書き込みできる

指定できるとはいえ、他のアプリケーションからアクセスできるようなプリファレンスファイルを作成するのは
セキュリティ的に危険で推奨されないので基本的にはMODE_PRIVATEを指定すればよいでしょう。

ファイル名とActivity名が同じでよいならばActivity#getPreferences(int mode)でもオブジェクトを取得できます。
その場合の引数は動作モードのみになります。

またMODE_PRIVATEでかつアプリケーションに対してプリファレンスがひとつでよい場合は
PreferenceManager#getDefaultSharedPreferences(Context context)でも可能です。

SharedPreferencesオブジェクトを取得できたらSharedPreferences#edit()によりSharedPreferences.Editorオブジェクトを取得し
Editorオブジェクトのメソッドにキーとバリューを与えることでファイルに書き込みができます。

SharedPreferences.Editor editor = preferences.
editor.putString("userName", "Tech Pjin");
editor.commit();

一連の操作が終わったら最後にcommit()を呼ぶのを忘れずに。

データの読み込み

読み込む場合は保存時と同様SharedPreferencesオブジェクトを取得し
SharedPreferences#getString(String key, String defValue)等でバリューを取り出します。

SharedPreferences preferences = getSharedPreferences("preferenceSample", MODE_PRIVATE);
String userName = preferences.getString("userName","");

第一引数は保存時のキー、第二引数はデフォルト値、
すなわち該当キーによるデータが保存されていない場合の返り値になります。

以上です。

  • このエントリーをはてなブックマークに追加

PAGE TOP