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.kts

dosyası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.DataStore
2import androidx.datastore.preferences.core.Preferences
3import androidx.datastore.preferences.core.stringPreferencesKey
4import androidx.datastore.preferences.preferencesDataStore
5import android.content.Context
6
7val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "app_settings")
8
9object 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}
6
7// Kullan
8viewModelScope.launch {
9userFlow.collect { (name, mail) ->
10println("Kullanıcı: $name, Email: $mail")
11}
12}

Çıktı:

1Kullanıcı: ahmet, Email: ahmet@example.com

Geç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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz

5 yorum

  • adlı kullanıcıya yanıt verdi
    eski_sarki

    geçiş bittiğini doğruladıktan sonra sil yani DataStorea yazılan verilerin aynı olduğunu

  • adlı kullanıcıya yanıt verdi
    birazsessiz

    ayy evet o temizleme kısmı önemli işte eski verileri sil demişler ama tam ne zaman silmek

  • adlı kullanıcıya yanıt verdi
    eski_sarki

    gönderideki adımları takip edersen veri kaybı olmaz zaten eski verileri önce okuyor sonra

  • adlı kullanıcıya yanıt verdi
    birazsessiz

    ama uygulamayı kapatıp açtıktan sonra kontrol etsen daha iyi değil mi veri gerçekten kayıtlı mı diye

  • birazsessiz

    of ya SharedPreferencesten geçiş lazım da veri kaybı falan olursa işte sorun bu şekilde