SharedPreferences
SharedPreferencesを使って、アプリのセッションをまたいで単純なキーと値のデータを保持します。設定の保存、読み取り、削除を学びます。
「SharedPreferences」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン4/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全6レッスンが含まれています。
永続ストレージの選択肢
Androidには、データをローカルに保存するいくつかの方法があります。
- SharedPreferences — 単純なキーと値のペア(設定、トークン)
- Room — 構造化されたSQLiteデータベース(複雑なデータ)
- DataStore — SharedPreferencesに代わる最新の非同期ストレージ
- Files — rawファイルI/O
SharedPreferencesは、単純な設定やユーザー設定に最適です。
SharedPreferencesとは
SharedPreferencesは、デバイス上のXMLファイルにキーと値のペアとしてデータを保存します。次の型に対応しています。
- String
- Int / Long / Float
- Boolean
- Set<String>
データはアプリの再起動後も保持され、構成変更(画面の回転)にも対応します。
SharedPreferencesインスタンスの取得
SharedPreferencesオブジェクトを取得する方法は2つあります。
// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
"MyAppPrefs", // file name
Context.MODE_PRIVATE // only your app can read it
)
// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)データの書き込み
Editorを使って値を書き込み、その後 apply() を呼び出します。
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
prefs.edit()
.putString("username", "alice")
.putInt("login_count", 5)
.putBoolean("dark_mode", true)
.apply() // async, non-blocking — preferred over commit()
// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
putString("username", "alice")
apply()
}データの読み取り
キーを指定して値を読み取ります。キーが存在しない場合のデフォルト値も指定します。
val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
val username = prefs.getString("username", "Guest") // default: "Guest"
val count = prefs.getInt("login_count", 0) // default: 0
val darkMode = prefs.getBoolean("dark_mode", false) // default: false
println("Hello, $username! Logins: $count. Dark: $darkMode")実践例:テーマの切り替え
ダークモードの設定を保存し、復元します。
class SettingsActivity : AppCompatActivity() {
private lateinit var binding: ActivitySettingsBinding
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySettingsBinding.inflate(layoutInflater)
setContentView(binding.root)
prefs = getSharedPreferences("settings", MODE_PRIVATE)
// Restore saved state
binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)
binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
prefs.edit().putBoolean("dark_mode", isChecked).apply()
}
}
}ログイントークンの保存
アプリの再起動後も認証トークンを保存して確認します。
// Save token after login
fun saveToken(token: String) {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.putString("token", token)
.apply()
}
// Check if user is logged in
fun isLoggedIn(): Boolean {
val token = getSharedPreferences("auth", MODE_PRIVATE)
.getString("token", null)
return token != null
}
// Clear on logout
fun logout() {
getSharedPreferences("auth", MODE_PRIVATE)
.edit()
.remove("token")
.apply()
}データの削除と消去
特定のキーを削除したり、すべてのデータを消去したりできます。
.remove("key")— 1つのエントリを削除する.clear()— ファイル内のすべてを削除する
必ず .apply() を呼び出してください(同期的な完了確認が必要な場合は .commit() を使用します)。
SharedPreferencesとDataStoreの比較
SharedPreferencesは問題なく動作しますが、次のような制限があります。
- 同期的な読み取りによってメインスレッドがブロックされる可能性がある
- 型安全性がない
Jetpack DataStoreは最新の代替手段です。Kotlin Flowと型安全性に対応し、完全に非同期で動作します。新規プロジェクトではDataStoreを優先してください。SharedPreferencesも広く使われており、少量のデータには十分適しています。
クイックチェック
UIスレッドをブロックせずにSharedPreferencesへ非同期でデータを保存するメソッドはどれですか?
まとめ:SharedPreferences
アプリの起動をまたいで単純なデータを永続化できるようになりました。
- 取得:
getSharedPreferences(name, MODE_PRIVATE) - 書き込み:
.edit().putString(key, value).apply() - 読み取り:
.getString(key, defaultValue) - 削除:
.edit().remove(key).apply() commit()(同期)よりもapply()(非同期)を使う
次のコース:アプリのアーキテクチャ — ViewModel、Room、Coroutines。
よくある質問
「SharedPreferences」レッスンは無料ですか?
はい。「SharedPreferences」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全6レッスンが含まれています。
「SharedPreferences」で何を学びますか?
SharedPreferencesを使って、アプリのセッションをまたいで単純なキーと値のデータを保持します。設定の保存、読み取り、削除を学びます。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/6です。
「SharedPreferences」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Kotlinコレクション
- RecyclerViewの基礎
- RecyclerViewのクリックイベント
- SharedPreferences
- DataStore Preferences
- AdaptersとDiffUtil