This guide provides a comprehensive tutorial on integrating DataStore with various Android components such as ViewModels, Activities, and Fragments, enhancing data handling in your application.
DataStore, Android development, ViewModel, LiveData, SharedPreferences, Android components integration
// ViewModel class to manage DataStore operations
class MyViewModel(private val dataStore: DataStore) : ViewModel() {
val myData: LiveData = liveData {
dataStore.data.collect { preferences ->
emit(preferences[stringPreferencesKey("myKey")] ?: "")
}
}
fun saveData(value: String) {
viewModelScope.launch {
dataStore.edit { preferences ->
preferences[stringPreferencesKey("myKey")] = value
}
}
}
}
// Activity class demonstrating usage
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize DataStore
val dataStore: DataStore = PreferenceDataStoreFactory.create {
// Provide your dataStore File or other configuration here
}
viewModel = ViewModelProvider(this, MyViewModelFactory(dataStore)).get(MyViewModel::class.java)
// Observe LiveData from ViewModel
viewModel.myData.observe(this, { value ->
// Update UI with the data from DataStore
})
// Save data when needed
viewModel.saveData("Hello, DataStore!")
}
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?