SharedPreferences を使用してシンプルなデータを保存する

比較的小さなコレクションの Key-Value を保存する場合は、SharedPreferences API を使用できます。SharedPreferences オブジェクトは、Key-Value ペアを格納したファイルをポイントし、Key-Value ペアの読み書きを行うためのシンプルなメソッドを備えています。各 SharedPreferences ファイルは、フレームワークによって管理し、非公開にすることも共有することもできます。

このページでは、SharedPreferences API を使用してシンプルな値を格納、取得する方法について説明します。

共有環境設定を管理する

新しい共有環境設定ファイルの作成や、既存の共有環境設定ファイルへのアクセスを行うには、次のいずれかのメソッドを呼び出します。

  • getSharedPreferences(): 名前で識別される複数の共有環境設定ファイルが必要な場合に使用し、最初のパラメータで名前を指定します。このメソッドは、アプリ内の任意の Context から呼び出すことができます。
  • getPreferences(): 1 つのアクティビティに対して共有環境設定ファイルを 1 つだけ使用する必要がある場合に、Activity からこのメソッドを使用します。このメソッドの場合、アクティビティに属するデフォルト共有環境設定ファイルを取得するため、名前を指定する必要はありません。

たとえば、次のコードは、リソース文字列 R.string.preference_file_key で識別される共有環境設定ファイルにアクセスし、プライベート モードで開きます。これにより、この共有環境設定ファイルにアクセスできるのは、このアプリだけになります。

Kotlin

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)

Java

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

共有環境設定ファイルに名前を付ける場合、対象アプリを一意に識別できる名前を使用してください。便利な方法としては、アプリ ID をプレフィックスとしてファイル名の先頭に付ける方法があります。たとえば、"com.example.myapp.PREFERENCE_FILE_KEY" です。

あるいは、アクティビティに対して共有環境設定ファイルが 1 つだけ必要な場合は、getPreferences() メソッドを使用します。

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

SharedPreferences API を使用してアプリ設定を保存する場合は、代わりに getDefaultSharedPreferences() を使用して、アプリ全体のデフォルト共有環境設定ファイルを取得する必要があります。詳細については、設定デベロッパー ガイドをご覧ください。

共有環境設定に書き込む

共有環境設定ファイルに書き込むには、SharedPreferences に対して edit() を呼び出して SharedPreferences.Editor を作成します。

putInt()putString() などのメソッドを使用して、書き込みを行う Key-Value を渡します。その後、apply() または commit() を呼び出して、変更内容を保存します。次のような問い合わせを受けることがあります。

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score_key), newHighScore);
editor.apply();

apply() は、すぐにメモリ内の SharedPreferences オブジェクトを変更しますが、更新内容は非同期でディスクに書き込まれます。他方、commit() を使用すると、データを同期的にディスクに書き込むことができます。ただし、commit() は同期的であり、UI レンダリングを一時停止する可能性があるため、メインスレッドからは呼び出さないようにしてください。

共有環境設定から読み取る

共有環境設定ファイルから値を取得するには、getInt()getString() などのメソッドを呼び出して、値に対応するキーを指定します。また、必要に応じて、キーが存在しない場合に返すデフォルト値を指定します。たとえば、以下の場合です。

Kotlin

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)
val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)

Java

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);
int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);