SharedPreferencesの動作について色々調べていたのですが、途中経過としてまとめです。

SharedPrefrencesとは

まずSharedPreferencesは、内部的にキーと値をHashMapとして保持し、最終的にXMLファイルとして出力をする。代表的な関数として以下の物がある。

  • getBoolean(String key, boolean defValue)
  • getFloat(String key, float defValue)
  • getInt(String key, int defValue)
  • getLong(String key, long defValue)
  • getString(String key, String defValue)

編集する時は、SharedPreferences.Editorを使用する。

作成されるXMLファイルのファイル名はプログラムから自由に指定ができ、アプリケーションディレクトリ下の、shared_prefディレクトリに作成される

少し分かりにくい点は、モードパラメーターはファイル作成時に使用されるということである。
SharedPrefrenceファイルが作成されるのは、ApplicationContextクラスのgetSharedPreferences (String name, int mode)メソッドが最初に呼ばれた時で、modeはこの時の作成時のファイルのモードとなり、そのままlinux状のファイルパミッションとなる(666等)
読み込み時に、パラメータで指定したモードでオープンする意味ではない。

サンプルソース

Android SDKドキュメントの中に記載されているソースのコピペ


import android.app.Activity;
import android.content.SharedPreferences;
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
. . .
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// Save user preferences. We need an Editor object to
// make changes. All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Don't forget to commit your edits!!!
editor.commit();
}
}

上記ソースはあくまでもサンプルという点

上記のソースコードでは、キーを押された時の音を出すか出さないかを、SharedPreferencesファイルに書きこんでいる。(ちなみにこのコードはcalculatorアプリに存在しない)

ちゃんとしたプログラムであれば、音を出す出さないは、PrefrenceActivityを使ったGUIによるプログラムとなる。
上記サンプルは、サンプルコードだから、とりあえずsilentModeを切り替えるプログラムを記載したのだろう。

その他

GUIを用いないプログラムにおいても、単純にSharedPrefrenceを使用するのであれば、ファイル名を勝手に決めてくれる、DefaultSharedPrefrenceを使用するのがお手軽である。

ブログ内の関連する記事