Key-Value データを保存する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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

注: SharedPreferences API は Key-Value ペアの読み書き用であり、アプリ設定向けのユーザー インターフェースを作成するための Preference API と混同しないように注意してください(ただし、後者もユーザー設定の保存には SharedPreferences を使用します)。Preference 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);

注: MODE_WORLD_READABLE モードと MODE_WORLD_WRITEABLE モードは、API レベル 17 でサポートが終了しています。Android 7.0(API レベル 24)以降では、サポートが終了したモードを使用すると SecurityException がスローされます。アプリ専用のファイルを他のアプリと共有する必要がある場合は、FileProvider を使用して FLAG_GRANT_READ_URI_PERMISSION を指定してください。詳細については、ファイルを共有するをご覧ください。

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

共有環境設定に書き込む

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

注: SharedPreferences オブジェクトではなく EncryptedSharedPreferences オブジェクトに対して edit() メソッドを呼び出すことで、セキュアな方法で共有環境設定を編集できます。詳細については、セキュアな方法でデータを扱う方法についてのガイドをご覧ください。

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);