반응형
getSharedPreferences 의 사용방법은 https://developer.android.com/training/data-storage/shared-preferences?hl=ko 를 참조하길 바란다
HashMap을 JSON 객체로 변환해주는 GSON 라이브러리 사용
GSON 라이브러리를 사용하기 위해 build.gradle파일에 의존성을 추가한다.
implementation 'com.google.code.gson:gson:2.9.0'
사용자 정보를 HASHMAP을 이용하여 저장하는 함수
fun saveData(name:String,bloodType:String,emergencynumber:String,birthdate:String,warnning:String){
val userInfoMap = HashMap<String, Any>()
userInfoMap[NAME] = name
userInfoMap[BLOOD_TYPE] = bloodType
userInfoMap[EMERGENCY_CONTACT] = emergencynumber
userInfoMap[BIRTHDATE] = birthdate
userInfoMap[WARNNING] = warnning
val gson = Gson()
val userInfoJson = gson.toJson(userInfoMap) //json변환
with(App.instance.getSharedPreferences(USER_INFORMATION, Context.MODE_PRIVATE).edit()){
putString(USER_INFO,userInfoJson)
apply()
}
Log.d("test",userInfoMap.toString())
Toast.makeText(App.instance,"저장이 완료되었습니다",Toast.LENGTH_SHORT).show()
}
- userInfoMap 이라는 HashMap 생성
- Gson().toJSON(HashMap) 을 통해 HashMap을 JSON 으로 변환
위에서 저장한 사용자 정보를 가져오는 함수
fun loadData(): HashMap<String, Any> {
val sharedPreferences = App.instance.getSharedPreferences(USER_INFORMATION, Context.MODE_PRIVATE)
val userInfoString = sharedPreferences.getString(USER_INFO, "")!!
var loadData = HashMap<String,Any>()
if(userInfoString.isNotEmpty()) {
loadData = Gson().fromJson(userInfoString, HashMap<String, Any>()::class.java).toMutableMap() as HashMap<String, Any>
}
return loadData
}
- userInfoString이 비어있지 않다면(데이터가 저장되어 있다면) 데이터를 가져온다
- Json을 HashMap으로 변환해서 가져온 후 반환
- 반환한 loadData는 HashMap이므로 위에서 저장한 [NAME], [BLOOD_TYPE] 등으로 값을 다시 불러올 수 있다
반환된 값을 사용하는 로직
fun loadData(){
val data = SharedPrefManager.loadData() as HashMap<String,Any>
if(data.isNotEmpty()) {
binding.nameValueTextView.text = data[NAME].toString()
binding.birthdateValueTextView.text = data[BIRTHDATE].toString() ?: "아직 미정"
binding.bloodtypeValueTextView.text = data[BLOOD_TYPE].toString() ?: "아직 미정"
binding.addressValueTextView.text = data[EMERGENCY_CONTACT].toString() ?: "아직 미정"
반응형
댓글