Last active
December 26, 2024 21:41
-
-
Save stevdza-san/fa01bb5159cdb50142d48bed8df7ed58 to your computer and use it in GitHub Desktop.
Preferences DataStore - YouTube Tutorial | https://youtu.be/hEHVn9ATVjY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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