Jetpack DataStore Migration: SharedPreferences'ten Güvenli Geçiş
SharedPreferences eski, güvensiz ve senkronize. DataStore ise şifreli, korutinlerle çalışan ve Google'ın yeni standardı. Ancak eski verileri kaybetmeden taşımak gerekir.
build.gradle.ktsdosyasına ekle:
1dependencies {2implementation("androidx.datastore:datastore-preferences:1.0.0")3}SharedPreferences yerine DataStore kullanacaksın. Önce bir singleton oluştur:
1import androidx.datastore.core.DataStore2import androidx.datastore.preferences.core.Preferences3import androidx.datastore.preferences.core.stringPreferencesKey4import androidx.datastore.preferences.preferencesDataStore5import android.content.Context67val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "app_settings")89object PreferencesKeys {10val USERNAME = stringPreferencesKey("username")11val EMAIL = stringPreferencesKey("email")12}SharedPreferences'ten verileri oku:
1val sharedPref = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE)2val username = sharedPref.getString("username", "")3val email = sharedPref.getString("email", "")ViewModel içinde korutinle yaz:
Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1viewModelScope.launch {2context.dataStore.edit { preferences ->3preferences[PreferencesKeys.USERNAME] = username?: ""4preferences[PreferencesKeys.EMAIL] = email?: ""5}6}DataStore'dan oku:
1val userFlow = context.dataStore.data.map { preferences ->2val name = preferences[PreferencesKeys.USERNAME]?: "Bilinmiyor"3val mail = preferences[PreferencesKeys.EMAIL]?: "Bilinmiyor"4Pair(name, mail)5}67// Kullan8viewModelScope.launch {9userFlow.collect { (name, mail) ->10println("Kullanıcı: $name, Email: $mail")11}12}Çıktı:
1Kullanıcı: ahmet, Email: ahmet@example.comGeçiş tamamlandıktan sonra SharedPreferences'i temizle:
1sharedPref.edit().clear().apply()Geçiş süreci: Eski verileri oku DataStore'a yaz Doğrula Sil. Hiçbir veri kaybı olmaz, güvenliğin artar.
5 yorum
of ya SharedPreferencesten geçiş lazım da veri kaybı falan olursa işte sorun bu şekilde
gönderideki adımları takip edersen veri kaybı olmaz zaten eski verileri önce okuyor sonra
ayy evet o temizleme kısmı önemli işte eski verileri sil demişler ama tam ne zaman silmek
geçiş bittiğini doğruladıktan sonra sil yani DataStorea yazılan verilerin aynı olduğunu
ama uygulamayı kapatıp açtıktan sonra kontrol etsen daha iyi değil mi veri gerçekten kayıtlı mı diye