Android[kotlin] - SharedPreferences()

안지현·2023년 4월 11일
0

Android[kotlin]

목록 보기
6/8
post-thumbnail

안드로이드 앱을 개발하면서 데이터를 저장하는 방법은 여러 가지가 있는데, 그 중 하나인 SharedPreferences를 사용해보려고 한다.

SharedPreferences 란??

-> 간단한 값을 저장할 때 주로 사용한다. 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장할 때 DB를 사용하면 복잡하기 때문에 SharedPreferences를 사용하면 적합하다.

SharedPreferences는 어플리케이션에 파일 형태로 데이터를 저장한다. 데이터는 (key, value) 형대로 data/data/패키지명/shared_prefs 폴더 안에 xml 파일로 저장된다. 해당 파일은 어플리케이션이 삭제되기 전까지 보존된다.

  • getSharedPreferences() : 이름으로 식별되는 공유 환경설정 파일이 여러 개 필요한 경우 이 매서드를 사용한다.
  • getPreferences() : 활동에 공유 환경설정 파일을 하나만 사용해야 하는 경우 Activity에서 이 메서드를 사용한다. 이 메서드는 활동에 속한 기본 공유 환경설정 파일을 검색하기 때문에 이름을 제공할 필요가 없다.

Write to shared preferences

sharedPreferences 파일에 정보를 담으려면 edit()을 사용해야 한다.
그리고 변경된 사항을 저장하기 위해 apply() 또는 commit()을 사용해야 한다.(무슨 차이인지는 잘 모르겠)

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}

정보를 보낼 EditActivity()

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityEditBinding.inflate(layoutInflater)
        setContentView(binding.root)
        ...
        binding.saveBtn.setOnClickListener {
            saveInfo()
            finish()
        }
    }
    private fun saveInfo() {
        with(getSharedPreferences("userInfo", Context.MODE_PRIVATE).edit()){
            putString(NAME, binding.nameEditText.text.toString())
            putString(BIRTH_DATE, binding.birthValueTextView.text.toString())
            putString(BLOOD_TYPE, getBloodType())
            putString(PHONE_NUMBER, binding.phoneNumberEditText.text.toString())
            putString(PRECAUTION,getPrecaution())
            apply()
        }
        Snackbar.make(
            binding.root,
            "저장이 완료되었습니다.",
            Snackbar.LENGTH_SHORT
        ).show()
    }

정보를 받을 MainActivity

override fun onResume() {
       super.onResume()
       getUserInfo()
   }
   
private fun getUserInfo() {
       with(getSharedPreferences(USER_INFO, Context.MODE_PRIVATE)){
            binding.nameValueTextView.text = getString(NAME, "미정")
           binding.birthValueTextView.text = getString(BIRTH_DATE, "미정")
           binding.bloodValueTextView.text = getString(BLOOD_TYPE, "미정")
           binding.phoneNumberValueTextView.text= getString(PHONE_NUMBER, "미정")

            val precautionState = getString(PRECAUTION, "")
            binding.precautionTextView.isVisible = precautionState.isNullOrEmpty().not()
            binding.precautionValueTextView.isVisible = precautionState.isNullOrEmpty().not()

            if(!precautionState.isNullOrEmpty()){
                binding.precautionValueTextView.text = precautionState
            }
        }
    }

0개의 댓글