DataStore Tercihleri
SharedPreferences yerine modern DataStore kitaplığını kullanın. Verileri Kotlin Flow olarak okuyun, edit{} ile yazın ve hataları güvenli şekilde yönetin.
DataStore Tercihleri, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 5. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.
Neden DataStore?
DataStore, SharedPreferences'ın modern alternatifidir. Gerçek sorunları çözer:
- SharedPreferences kullanıcı arayüzü iş parçacığını engeller — DataStore tamamen eşzamansızdır
- SharedPreferences yakalanmamış özel durumlar oluşturabilir — DataStore hataları Flow aracılığıyla yönetir
- DataStore tür güvenlidir (Preferences) veya şema güvenlidir (Proto)
- Kotlin Coroutines ve Flow ile yerel olarak çalışır
İki Tür Veri Deposu
Kullanım amacınıza uygun türü seçin:
- Preferences Veri Deposu — anahtar-değer çiftleri kullanır, şema gerekmez. Kurulumu en kolay seçenektir. Uygulama ayarları ve kullanıcı tercihleri için idealdir.
- Proto Veri Deposu — Protocol Buffers kullanılarak oluşturulan türü belirlenmiş nesnelerdir. Bir .proto şema dosyası gerektirir. Yapılandırılmış verileriniz olduğunda idealdir.
Bu derste Preferences Veri Deposu ele alınmaktadır.
Bağımlılığı Ekleme
Veri Deposunu app/build.gradle dosyasına ekleyin:
// app/build.gradle
dependencies {
implementation 'androidx.datastore:datastore-preferences:1.1.1'
// Coroutines (likely already in your project)
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
}Veri Deposu Örneği Oluşturma
Üst düzey temsilciyi kullanarak Veri Deposunu bir kez oluşturun. Bu işlem genellikle bağımsız bir dosyada yapılır:
import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStore
// Top-level property — creates a single DataStore instance per Context
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "user_prefs")Anahtarları Tanımlama
Anahtarlar düz dizeler değil, tür güvenli nesnelerdir. Bunları doğru fabrika işleviyle oluşturun:
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.core.stringPreferencesKey
object PreferencesKeys {
val DARK_MODE = booleanPreferencesKey("dark_mode")
val USER_NAME = stringPreferencesKey("user_name")
val LAUNCH_COUNT = intPreferencesKey("launch_count")
}Veri Yazma
Bir eş yordamın içinde edit { } kullanarak yazın:
import androidx.datastore.preferences.core.edit
// In a ViewModel or Repository:
suspend fun saveDarkMode(enabled: Boolean) {
context.dataStore.edit { prefs ->
prefs[PreferencesKeys.DARK_MODE] = enabled
}
}
suspend fun incrementLaunchCount() {
context.dataStore.edit { prefs ->
val current = prefs[PreferencesKeys.LAUNCH_COUNT] ?: 0
prefs[PreferencesKeys.LAUNCH_COUNT] = current + 1
}
}Flow ile Veri Okuma
Veri Deposu, verileri Flow olarak sunar. İhtiyacınız olan değeri çıkarmak için map kullanın:
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
val darkModeFlow: Flow<Boolean> = context.dataStore.data
.map { prefs ->
prefs[PreferencesKeys.DARK_MODE] ?: false // default = false
}
val userNameFlow: Flow<String> = context.dataStore.data
.map { prefs ->
prefs[PreferencesKeys.USER_NAME] ?: "Guest"
}ViewModel'de Toplama
Verimli bir şekilde toplamak için stateIn kullanarak Veri Deposu Flow'larını bir ViewModel'den sunun:
class SettingsViewModel(private val repo: SettingsRepository) : ViewModel() {
val isDarkMode: StateFlow<Boolean> = repo.darkModeFlow
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = false
)
fun toggleDarkMode(enabled: Boolean) {
viewModelScope.launch {
repo.saveDarkMode(enabled)
}
}
}Activity/Fragment İçinde Gözlemleme
StateFlow'u kullanıcı arayüzünde lifecycleScope.launch kullanarak toplayın:
// In Fragment:
lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.isDarkMode.collect { darkMode ->
binding.switchDarkMode.isChecked = darkMode
AppCompatDelegate.setDefaultNightMode(
if (darkMode) AppCompatDelegate.MODE_NIGHT_YES
else AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
)
}
}
}Hata İşleme
Dosya bozulmuşsa Veri Deposu IOException yayınlar. Bunu Flow işlem hattınızda yakalayın:
import kotlinx.coroutines.flow.catch
import java.io.IOException
val safeFlow: Flow<Boolean> = context.dataStore.data
.catch { exception ->
if (exception is IOException) {
emit(emptyPreferences()) // return defaults
} else {
throw exception
}
}
.map { prefs ->
prefs[PreferencesKeys.DARK_MODE] ?: false
}Veri Deposu ve SharedPreferences Karşılaştırması
Veri Deposunun neden üstün olduğunun özeti:
- Veri Deposu okumaları ve yazmaları otomatik olarak arka plan iş parçacığında gerçekleştirir — ANR riski yoktur
- SharedPreferences
apply()sessizce başarısız olabilir; Veri Deposu hataları Flow üzerinden iletir - Veri Deposu reaktiftir — veriler değiştiğinde kullanıcı arayüzü otomatik olarak güncellenir
- SharedPreferences için geçiş yolu yoktur; Veri Deposunda yerleşik bir
SharedPreferencesMigrationbulunur
Hızlı Kontrol
Veri Deposunun verilerini uygulamanın geri kalanına sunmak için kullandığı temel mekanizma nedir?
Özet: Veri Deposu Tercihleri
Veri Deposu, basit verileri kalıcı olarak saklamanın modern yoludur:
datastore-preferencesbağımlılığını ekleyinpreferencesDataStoretemsilcisiyle tek bir örnek oluşturunstringPreferencesKey,booleanPreferencesKeyve benzeri işlevlerle tür güvenli anahtarlar tanımlayın- Bir eş yordamın içinde
dataStore.edit { }ile yazın dataStore.data.map { }ileFlowolarak okuyun.catch { emit(emptyPreferences()) }ileIOExceptionhatasını işleyin
Sırada: DiffUtil ile verimli liste bağdaştırıcıları oluşturma var.
Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 36
- Dersler
- 152
Sıkça Sorulan Sorular
“DataStore Tercihleri” dersi ücretsiz mi?
Evet — “DataStore Tercihleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.
“DataStore Tercihleri” dersinde ne öğreneceğim?
SharedPreferences yerine modern DataStore kitaplığını kullanın. Verileri Kotlin Flow olarak okuyun, edit{} ile yazın ve hataları güvenli şekilde yönetin. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 5. dersidir.
“DataStore Tercihleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Kotlin Koleksiyonları
- RecyclerView Temelleri
- RecyclerView Tıklama Olayları
- SharedPreferences
- DataStore Tercihleri
- Adaptörler ve DiffUtil