データの保存/読み出し(プリファレンス)

(ブログ記事の一覧は「こちら」)

みなさんが使っているスマホアプリで、アプリ内で設定した内容が保存されていたり、読み込まれて設定されたりすることは普通にあることだと思います。
ここではAndroidアプリ内でデータを保存/読み込みをする方法を学びましょう。

ここで学ぶこと

  • プリファレンス(SharedPreferencesクラス)を用いることで、アプリ内に指定したデータを保存したり、読み込むことができます。

例題

作成するもの

f:id:MJeeeey:20190901184925p:plain:w240

この例題では、以下のことが実現できます。

  • Saveボタンをクリックすると、EditTextに入力したテキストを保存する。
  • Loadボタンをクリックすると、保存していたテキストを読み込み、EditTextに表示する。

レイアウト

まず新規にプロジェクトを作成して、レイアウト(activity_main.xml)に以下のコントロールを配置してください。

  • Plain Text(EditText)
  • Button(Saveボタン)
  • Button(Loadボタン)

プログラム

次にプログラム(MainActivity.java)を記述します。

まずはボタンをクリックしたときに呼ばれる関数を用意します。復習として、コードを載せておきます。onCreate関数の中に以下を記述します。
Saveボタン、Loadボタンをそれぞれ記述してください。

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // ボタンをクリックしたときに呼ばれる
    }
});


EditTextに入力したテキストを保存するには、以下のコードを記述します。
Saveボタンをクリックしたときに呼ばれる箇所に、以下のコードを記述します。

EditText editText = findViewById(R.id.editText);

// プリファレンスへの書き込み
SharedPreferences pref = getSharedPreferences("APP_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("KEY_NAME", editText.getText().toString());
editor.apply();


保存したデータを読み込み、EditTextに表示させるには、以下のコードを記述します。
Loadボタンをクリックしたときに呼ばれる箇所に、以下のコードを記述します。

// プリファレンスからの読み込み
SharedPreferences pref = getSharedPreferences("APP_NAME", Context.MODE_PRIVATE);
String strData = pref.getString("KEY_NAME", "");

EditText editText = findViewById(R.id.editText);
editText.setText(strData);

実行、確認

これでプログラムは完成です。エミュレータで起動して、実際にデータの保存/読み込みができているかどうか、確認してみてください。

SharedPreferencesクラスのプログラムは、何も見ないで書くには難しいかもしれませんので、必要になったときに、このページなどを参考にしてもらえれば良いと思います。

課題1

例題のプログラムだけでは、アプリを起動した時に、保存してあったデータがEditTextに反映されないです。
そのため、アプリを起動した時に、保存してあったデータがEditTextに反映されるようにプログラムを修正してください。


[ヒント]
onCreate関数の中に、Loadボタンをクリックしたときに呼ばれるコードを記述することで、課題1の内容は実現できます。

課題2

Plain Text(EditText)を1つ追加して、2つにしてください。それぞれのテキストが保存されるようにプログラムを修正してください。


[ヒント]
例題の、SharedPreferencesクラスのプログラム例にある「"KEY_NAME"」について、それぞれ別の名前を設定することで、別々にデータの保存/読み込みの管理ができるようになります。