設定の読み書き
ユーザー設定を保存して監視します
「設定の読み書き」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
読み取りと書き込み
キーを定義したら、中心となる操作はデータの読み取りと、editを使った書き込みです。読み取りはリアクティブに行われ、書き込みはsuspend関数です。
データのFlow
dataStore.dataはFlow<Preferences>です。書き込みを行うたびに、新しいPreferencesのスナップショットをFlowが発行するため、collectしている側は自動的に最新の状態を受け取れます。
val rawData: Flow<Preferences> = dataStore.data単一の値をマッピングする
Preferencesオブジェクト全体が必要になることは、ほとんどありません。mapを使って1つのキーを取り出し、デフォルト値を適用します。
val darkMode: Flow<Boolean> = dataStore.data
.map { prefs -> prefs[PrefKeys.DARK_MODE] ?: false }読み取りエラーへの対処
ディスクの読み取りでIOExceptionが発生することがあります。mapの前にcatchを使用して空のpreferencesを発行し、Flowを継続させます。
val darkMode: Flow<Boolean> = dataStore.data
.catch { e ->
if (e is IOException) emit(emptyPreferences())
else throw e
}
.map { it[PrefKeys.DARK_MODE] ?: false }editによる書き込み
値を変更するには、edit suspend関数を呼び出します。ラムダの内部では、変更可能なpreferencesオブジェクトを受け取るので、そのオブジェクトにキーを設定します。ブロック全体が1つのトランザクションになります。
suspend fun setDarkMode(enabled: Boolean) {
dataStore.edit { prefs ->
prefs[PrefKeys.DARK_MODE] = enabled
}
}editはsuspend関数
editはsuspend関数なので、コルーチンから呼び出す必要があります。通常はViewModel内でviewModelScope.launchを使って呼び出します。これにより、書き込みがメインスレッド以外で行われることが保証されます。
fun toggleDarkMode(value: Boolean) {
viewModelScope.launch {
repository.setDarkMode(value)
}
}複数のキーを更新する
1つのeditブロックで複数のキーを設定できます。これらはアトミックにまとめてコミットされるため、監視側が更新途中の状態を確認することはありません。
dataStore.edit { prefs ->
prefs[PrefKeys.USERNAME] = "ada"
prefs[PrefKeys.DARK_MODE] = true
prefs[PrefKeys.FONT_SIZE] = 16
}値をインクリメントする
editの内部では、現在の値を読み取って新しい値を計算できます。起動回数のようなカウンターに便利です。
suspend fun incrementLaunchCount() {
dataStore.edit { prefs ->
val current = prefs[PrefKeys.LAUNCH_COUNT] ?: 0
prefs[PrefKeys.LAUNCH_COUNT] = current + 1
}
}削除とクリア
1つのキーを削除するにはremoveを、ストアを消去するにはclearを使用します。どちらもeditブロック内で呼び出します。
dataStore.edit { prefs ->
prefs.remove(PrefKeys.USERNAME)
}
dataStore.edit { prefs ->
prefs.clear()
}Composeでcollectする
Composableでは、collectAsStateWithLifecycle()を使ってViewModelのFlowをstateに変換します。設定が変更されるたびにUIが再コンポーズされます。
val darkMode by viewModel.darkMode.collectAsStateWithLifecycle(initial = false)
Switch(
checked = darkMode,
onCheckedChange = { viewModel.toggleDarkMode(it) }
)読み取り・変更・書き込みのサイクル
一連の流れをまとめると、UIがFlow経由で読み取り、ユーザーが切り替え操作を行い、ViewModelがコルーチンを起動してeditを呼び出し、DataStoreが書き込みを行い、Flowが再び値を発行して、UIが再コンポーズされます。最初から最後まで完全にリアクティブです。
理解度チェック
読み取りと書き込みを理解できているか確認しましょう。
まとめ
これで設定を読み書きできるようになりました。
dataStore.dataはリアクティブなFlow<Preferences>ですmapは単一の値を取り出し、catchはI/Oエラーを処理しますdataStore.edit { }はコルーチンからアトミックに書き込みますcollectAsStateWithLifecycleがCompose UIを更新します
次は、Proto DataStoreを使った型付き構造化データです。
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 36
- レッスン
- 152
よくある質問
「設定の読み書き」レッスンは無料ですか?
はい。「設定の読み書き」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「設定の読み書き」で何を学びますか?
ユーザー設定を保存して監視します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「設定の読み書き」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。