Skip to content

Instantly share code, notes, and snippets.

@stevdza-san
Last active December 26, 2024 21:41
Show Gist options
  • Save stevdza-san/fa01bb5159cdb50142d48bed8df7ed58 to your computer and use it in GitHub Desktop.
Save stevdza-san/fa01bb5159cdb50142d48bed8df7ed58 to your computer and use it in GitHub Desktop.
Preferences DataStore - YouTube Tutorial | https://youtu.be/hEHVn9ATVjY
const val PREFERENCE_NAME = "my_preference"
class DataStoreRepository(context: Context) {
private object PreferenceKeys {
val name = preferencesKey<String>("my_name")
}
private val dataStore: DataStore<Preferences> = context.createDataStore(
name = PREFERENCE_NAME
)
suspend fun saveToDataStore(name: String){
dataStore.edit { preference ->
preference[PreferenceKeys.name] = name
}
}
val readFromDataStore: Flow<String> = dataStore.data
.catch { exception ->
if(exception is IOException){
Log.d("DataStore", exception.message.toString())
emit(emptyPreferences())
}else {
throw exception
}
}
.map { preference ->
val myName = preference[PreferenceKeys.name] ?: "none"
myName
}
}
class MainActivity : AppCompatActivity() {
private lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
mainViewModel.readFromDataStore.observe(this, { myName ->
name_txt.text = myName
})
save_btn.setOnClickListener {
val myName = name_et.text.toString()
mainViewModel.saveToDataStore(myName)
}
}
}
class MainViewModel(application: Application) : AndroidViewModel(application) {
private val repository = DataStoreRepository(application)
val readFromDataStore = repository.readFromDataStore.asLiveData()
fun saveToDataStore(myName: String) = viewModelScope.launch(Dispatchers.IO) {
repository.saveToDataStore(myName)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment