<HOME

SharedPreferencesを使用して設定値を保存する30分


アプリの設定値を保存する方法について学習します。

  1. 「SharedPreferencesTraining」アプリを作成します。

    1. Android Studioを起動し、新規プロジェクトを作成します。

      「Welcome to Android Studio」画面の場合は、「Start a new Android Studio project」をクリックします。

      別のプロジェクトが開いている場合は、ツールバーから「File」→「New」→「New Project...」をクリックします。

    2. HelloWorldの時と同じようにプロジェクトを作成していきます。

      アプリ名は「SharedPreferencesTraining」としてください。

      今回は「Backwards Compatibility (AppCompat)」のチェックは外しておきます。

  2. メンバ変数に保持した値は、変数の解放の際、すなわちインスタンスが破棄される際に失われます。

    実際の動作を確認してみましょう。

    1. EditTextに入力した値を書き込み/読み込みする処理を実装します。

      サンプル : activity_main.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

    2. アプリを動作させてみましょう。


      アプリ再起動

      メンバ変数に保持された値は、アプリを再起動すると失われていることがわかります。

  3. アプリ終了時にも残っておいてほしい情報は、不揮発な領域に保存する必要があります。

    Androidでは、設定値などを不揮発な領域へ書き込んだり、またそこから読み込んだりできるように、PreferenceというAPIが用意されています。

    1. SharedPreferencesクラスを利用して、テキストの書き込み/読み込みする処理を実装します。

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

    2. アプリを動作させてみましょう。


      アプリ再起動

      SharedPreferencesに保持された値は、アプリを再起動しても失われていないことがわかります。

    3. 次の記述について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      コメントに記載の通り、PreferenceManagerのstaticメソッド「getDefaultSharedPreferences」を使用して
      アプリのSharedPreferencesインスタンスを取得しています。


      SharedPreferencesに対して値の追加や更新を行う際には、「edit」メソッドによりEditorインスタンスを取得する必要があります。

      Editorインスタンスの「putString」や「putInt」等のメソッドを使用して、値の追加・更新を行います。

      「put~」メソッドの第一引数にはキーとなる文字列、第二引数にはキーに対応する値を指定します。

      (キーは、値を取り出すときや、新規なのか上書きなのかを判断するために必要な、IDのようなものです)

      「put~」メソッドの戻り値はEditorインスタンス自身ですので、連続して処理をコールするような記述ができます。


      putしただけではまだ揮発領域にしか値が書き込まれていないので、
      不揮発領域に保存するために「commit」もしくは「apply」します。

      • commit : 同期的に処理されます。また、boolean型で成否(true=成功)を返却します。
      • apply : 非同期に処理されます。そのため、成否の結果を受け取れません。

      非同期処理については別途学習します。

      実装に応じて、「commit」「apply」のどちらが適切か取捨選択してください。

    4. 次の記述について説明します。

      コードを表示するにはJavaScriptを有効にしてください

      SharedPreferencesから値を取り出すには、「getString」や「getInt」等のメソッドを使用します。

      「get~」メソッドの第一引数にはキーを指定します。

      第二引数には、SharedPreferences内に指定したキーが存在しない場合の代替の値(デフォルト値)を指定します。

  4. 実際に不揮発な領域に保存されているPreferenceを見てみましょう。

    Preferenceは、アプリのファイル保存領域に、xmlファイルとして保存されています。

    1. コマンドプロンプトを開き、以下のコマンドを入力してAndroid端末のシェルに入ります。

      adb shell

    2. シェル内で以下のコマンドを入力します。

      run-as <アプリのパッケージ名>

      run-as com.example.s.sharedpreferencestraining

      これは、シェル内で指定したアプリの権限で動作するためのコマンドです。

      これによりアプリが作成したファイルにアクセスできるようになります。

      なお、「run-as」コマンドはreleaseビルドのアプリには使用できません。

    3. 以下のコマンドで、カレントディレクトリ内のファイル・サブディレクトリを確認します。

      ls -la

      SharedPreferencesを使用してPreferenceを保存している場合は、「shared_prefs」ディレクトリが存在するはずです。

    4. 以下のコマンドで、SharedPreferencesにより保存されたxmlファイルが存在することを確認します。

      cd shared_prefs/

      ls -la

    5. 以下のコマンドで、xmlファイルの中身を確認することができます。

      cat <ファイル名>

SharedPreferencesに関する詳細については公式ドキュメントに記載されています。

また、Androidは先人たちがネット上にたくさんの情報を残してくれています。

これらも活用して、是非このAPIを有効に使えるようになってください。