Sobes.tech
Junior

Да ли сте радили са DataStore Preferences у Android-у?

sobes.tech АИ

Одговор од АИ

Да, радио сам.

DataStore Preferences је асинхрони аналог SharedPreferences, који је део AndroidX DataStore. Он омогућава безбедно чување једноставних парова кључ-вредност, користећи KSP на Kotlin Flow или RxJava3 за асинхроно рад и Protobuf/Proto DataStore или Proto DataStore за типове података.

Главне предности DataStore Preferences у поређењу са SharedPreferences:

  • Асинхроност: Ради уз употребу Flow или RxJava3, што спречава блокирање главног тока и елиминише проблеме са ANR.
  • Безбедност: Атомарне операције читања/писања гарантују конзистентност података.
  • Типска безбедност: Са Protobuf DataStore-ом можете дефинисати шему података, што елиминише грешке при раду са типовима.
  • Реактивност: Омогућава праћење промена података у реалном времену.

Пример коришћења DataStore Preferences са Kotlin Flow:

// Креирање DataStore
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")

// Читање података
suspend fun readString(context: Context, key: String): String? {
    val preferencesKey = stringPreferencesKey(key)
    val preferences = context.dataStore.data.first()
    return preferences[preferencesKey]
}

// Писање података
suspend fun writeString(context: Context, key: String, value: String) {
    val preferencesKey = stringPreferencesKey(key)
    context.dataStore.edit { settings ->
        settings[preferencesKey] = value
    }
}

Пример коришћења KSP за креирање типске безбедности:

// У build.gradle (:app) додајте плагин
plugins {
 ...
 id("com.google.devtools.ksp") version "1.7.21-1.0.8" // Пример верзије, проверите актуелну
}

// У build.gradle (:app) додајте зависности
dependencies {
 ...
 implementation("androidx.datastore:datastore-preferences:1.0.0") // Проверите актуелну верзију
 implementation("androidx.datastore:datastore-preferences-core:1.0.0") // Проверите актуелну верзију
 ksp("androidx.datastore:datastore-preferences-core:1.0.0") // Проверите актуелну верзију
}

// Дефинисање интерфејса за KSP
interface SettingsPref {
    val appName: String
    val isNotificationsEnabled: Boolean
    val theme: Int
}

// Генерисање реализације помоћу KSP
// Ово ће створити класу типа SettingsPrefImpl, коју можете користити за приступ подацима

DataStore Preferences је препоручени начин за чување једноставних подешавања и података у Android-у, замењујући застарели SharedPreferences.