본문 바로가기
안드로이드

[Kotlin] getSharedPreferences 해쉬맵 사용하기

by 핫동경 2023. 8. 28.
반응형

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() ?: "아직 미정"

 

 

반응형

댓글