Androidアプリで「ちょっとしたデータを保存したい」と思ったとき、まず使うのが SharedPreferences です。データベースを使うほどではないけれど、設定値やログイン情報を覚えておきたい…そんなときに便利な仕組みです。
今回は、SharedPreferencesの基本的な使い方と、実務でハマりやすいポイントについて紹介します。
SharedPreferencesの特徴
- アプリ内に キーと値のペア でデータを保存できる
- プリミティブ型(String, Int, Boolean など)を簡単に扱える
- アプリを閉じても値が保持される
- ユーザーごとの簡単な設定値に最適
一方で、大量データや検索が必要な場合には不向きなので、SQLiteやRoomなどを使うべきです。
実装例
まずは文字列を保存・読み出すシンプルな例です。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val prefs = getSharedPreferences("my_prefs", MODE_PRIVATE)
// 値を保存
val editor = prefs.edit()
editor.putString("username", "taro")
editor.putInt("age", 25)
editor.putBoolean("isLogin", true)
editor.apply() // 非同期保存
}
}
apply()
を呼ぶことで保存が完了します。同期的に保存したい場合は commit()
を使いますが、基本的には非同期保存の apply()
で十分です。
値の読み出し
保存した値は以下のようにして取り出せます。
val prefs = getSharedPreferences("my_prefs", MODE_PRIVATE)
val username = prefs.getString("username", "defaultUser")
val age = prefs.getInt("age", 0)
val isLogin = prefs.getBoolean("isLogin", false)
Log.d("PrefsTest", "username=$username, age=$age, isLogin=$isLogin")
第2引数は「デフォルト値」で、保存されていない場合に返される値です。
使うときのポイント
- 保存する内容はシンプルに
– SharedPreferencesはJSONやオブジェクトの保存には不向きです。あくまで基本的な値専用と割り切りましょう。 - スレッドセーフではあるが、大量更新は避ける
– 何度も更新が走るケースはDBを検討すべきです。 - セキュリティ面に注意
– そのまま平文で保存されるため、パスワードや認証トークンは保存しない方が安全です。どうしても必要な場合は暗号化ライブラリと組み合わせましょう。
まとめ
SharedPreferencesはアプリ開発における「ちょっとしたデータ保存」の基本機能です。
- キーと値のペアでシンプルに保存できる
- アプリを閉じてもデータが保持される
- セキュリティに注意しつつ、適切に使うのがポイント
👉 今後の記事では「EncryptedSharedPreferences」を使った暗号化保存についても紹介予定です。より安全にユーザー情報を扱いたい方はぜひチェックしてみてください。
コメント