// 데이터 불러오기
private suspend fun load() : Flow<String> {
val key = stringPreferencesKey(stringKey)
return dataStore.data.catch { e ->
if (e is IOException) {
emit(emptyPreferences())
} else {
throw e
}
}.map {
it[key] ?: "기본 텍스트입니다."
}
}
dataStore에 접근하여 예외 처리를 해주고
정상적으로 실행 된 경우 key값에 해당하는 value 값을 리턴한다.
lifecycleScope.launch {
load().collect {
binding.SavedText.text = it
}
}
저장과 동일하게 코루틴으로 작동하도록 하며,
flow를 collect하도록 한다.
전체 코드
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
private val Context.dataStore:
DataStore<Preferences> by preferencesDataStore(name = "settings")
private val stringKey = "key"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 데이터바인딩
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
lifecycleScope.launch {
load().collect {
binding.SavedText.text = it
}
}
binding.button.setOnClickListener {
lifecycleScope.launch {
save(binding.editView.text.toString())
}
}
}
// 데이터 저장
private suspend fun save(value: String){
val key = stringPreferencesKey(stringKey)
dataStore.edit {
it[key] = value
}
}
// 데이터 불러오기
private suspend fun load() : Flow<String> {
val key = stringPreferencesKey(stringKey)
return dataStore.data.catch { e ->
if (e is IOException) {
emit(emptyPreferences())
} else {
throw e
}
}.map {
it[key] ?: "기본 텍스트입니다."
}
}
}