【Android】SharedPreferenceを使用して永続データを実装する【Java/Kotlin】

こんにちは!

今回はSharedPreferenceを使用して永続データを実装したいと思います!

アプリ開発する上でほぼ必須かと思われます。

SharedPreferenceとは?

端末内にデータをKey-Value方式で保持するしくみ。

アプリキルされてもデータが端末内ファイルに切り出されているので保持できるようになっています。

保存できる型は?

保存できる方は下記に5つになります。

  • String
  • Int
  • Long
  • Float
  • Boolean

配列やJson等を文字列に変換して保存することでさまざまな型を保存することは可能です。

String型 保存/取得

保存(筆者はActivityクラスで記載しています。)

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ保存
sp.edit().putString("key", "hoge").commit();
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ保存
sp.edit().putString("key", "hoge").commit()

getSharedPreferences()の説明

引数型説明
第一引数String保存するファイル名に使用する
第二引数IntContext.MODE_PRIVATE: 実行時アプリのみ読み書きが可能
Context.MODE_WORLD_READABLE: 他アプリから読み取りのみ可能
Context.MODE_WORLD_WRITEABLE:他アプリから書き込みのみ可能

特段理由がない限りMODE_PRIVATEを使用しましょう

外部からデータを変更されたり読み込まれたりする可能性があります。

commit()の説明

説明
commit()保存したデータをファイルに書き出す

commit()は同期的にファイルに書き出されapplyは非同期的にファイルに書き出される

特段理由がない場合はapplyを推奨します

putString()の説明

引数型説明
第一引数String指定した文字列がデータに紐付けたいキーとして設定する
第二引数String指定した文字列がデータとして仮保存される

取得

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ取得
String data = sp.getString("key", "null");
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ取得
val data = sp.getString("key", "null")

getString()の説明

引数型説明
第一引数String取得したいデータに紐づけているキーを指定する
第二引数String第一引数で指定したキーにデータが入っていない場合に返却したい値を指定する

Int 保存/取得

保存

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ保存
sp.edit().putInt("key", 123).commit();
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ保存
sp.edit().putInt("key", 123).commit()

putInt()の説明

引数型説明
第一引数String指定した文字列がデータに紐付けたいキーとして設定する
第二引数Int指定したInt値がデータとして仮保存される

取得

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ取得
int data = sp.getInt("key", 0);
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
val data = sp.getInt("key", 0)

getInt()の説明

引数型説明
第一引数String取得したいデータに紐づけているキーを指定する
第二引数Int第一引数で指定したキーにデータが入っていない場合に返却したい値を指定する

Long型 保存/取得

保存

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ保存
sp.edit().putLong("key", 123L).commit();
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ保存
sp.edit().putLong("key", 123L).commit()

putLong()の説明

引数型説明
第一引数String指定した文字列がデータに紐付けたいキーとして設定する
第二引数Long指定したLong値がデータとして仮保存される

取得

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ取得
Long data = sp.getLong("key", 0L);
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ取得
val data = sp.getLong("key", 0L)

getLong()の説明

引数型説明
第一引数String取得したいデータに紐づけているキーを指定する
第二引数Long第一引数で指定したキーにデータが入っていない場合に返却したい値を指定する

Float型 保存/取得

保存

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ保存
sp.edit().putFloat("key", 1.23F).commit();
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ保存
sp.edit().putFloat("key", 1.23F).commit();

putFloat()の説明

引数型説明
第一引数String指定した文字列がデータに紐付けたいキーとして設定する
第二引数Float指定したFloat値がデータとして仮保存される

取得

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ取得
float data = sp.getFloat("key", 0F);
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ取得
val data = sp.getFloat("key", 0f)

getFloat()の説明

引数型説明
第一引数String取得したいデータに紐づけているキーを指定する
第二引数Float第一引数で指定したキーにデータが入っていない場合に返却したい値を指定する

Boolean型 保存/取得

保存

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ保存
sp.edit().putBoolean("key", true).commit();
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ保存
sp.edit().putBoolean("key", true).commit()

putBoolean()の説明

引数型説明
第一引数String指定した文字列がデータに紐付けたいキーとして設定する
第二引数Boolean指定したBoolean値がデータとして仮保存される

取得

// SharedPreferencesのインスタンス取得
SharedPreferences sp = getApplicationContext().getSharedPreferences("app_pref", MODE_PRIVATE);
// データ取得
boolean data = sp.getBoolean("key", false);
// SharedPreferencesのインスタンス取得
val sp = applicationContext.getSharedPreferences("app_pref", Context.MODE_PRIVATE)
// データ取得
val data = sp.getBoolean("key", false)

getBoolean()の説明

引数型説明
第一引数String取得したいデータに紐づけているキーを指定する
第二引数Boolean第一引数で指定したキーにデータが入っていない場合に返却したい値を指定する

バックアップに対応する

アプリをアンインストールするとSharedPreferenceに保存したデータも消えてしまいます。

それらを回避したい場合はAndroidManifestにandroid:allowBackup=”true“を設定しましょう

上記を設定するとSharedPreferenceのみならず、FileやDB等が自動でバックアップされます。

<manifest ....>

    <application
        android:allowBackup="true"
        ....

最後に

いかがでしたでしょうか

SharedPreferenceはよく使うので覚えておくといいと思いますー

それでは!

コメント

タイトルとURLをコピーしました