Kotlin/TIL

SharedPreference (TIL 04.30)

내손은개발 🐾 2024. 4. 30. 21:38

SharedPreference

한줄 설명 : 간단한 데이터를 저장할 때 사용하고 데이터는 파일 형태로 저장되고 key-value형식으로 저장된다.

 

설명은 다 잘 나와있어서 바로 공식문서의 사용법을 보면

getSharedPreferences()

파일이 여러 개일 경우 사용하고 앱의 모든 Context에서 이 메서드를 호출할 수 있다.

 

파일 형태와, 모드를 지정한다.

 

 

 

 

getPreferences()

파일을 하나만 사용할 경우 Activity에서 이 메서드를 사용한다. 기본 공유 환경설정 파일을 검색하기 때문에 파일 이름을 제공할 필요가 없다.

 

 

 

사용하기

Write

SharedPreferences에서 edit()을 호출하여서 SharedPreferences.Editor를 만든다.

putInt() 및 putString()과 같은 메서드를 사용해서 key-value를 전달한다.

다음으로 apply() 또는 commit()를 호출하여 변경사항을 저장한다.

apply()는 메모리 내에 SharedPreferences 객체를 즉시 변경하지만 업데이트를 디스크에 비동기적으로 쓴다.

또는 commit()을 사용해서 데이터를 디스크에 동기적으로 쓸 수 있다.

그러나 commit()은 동기적이므로 기본 스레드에서 호출하는 것을 피해야한다.

 

 

Read

getInt()나 getSTring()과 같은 메서드를 호출하여서 원하는 값에 key를 넣으면 된다.

key가 없을 경우 반환할 기본값을 제공한다.

 

위에 내용은 전부 공식문서 내용입니다.

 

강의 실습

한 Activity 위에서 editText에 값을 입력하고 button을 클릭할 경우 데이터를 저장 

더보기
	onCreate() {
    
    	...
        
		binding.btnSave.setOnClickListener {
            saveData()
        }
        initData()
	}

    private fun saveData() {
        val setTitle = getSharedPreferences("title", 0)
        val editName = setTitle.edit()

        editName.putString("name", binding.etName.text.toString()) //key - value
        editName.apply() //저장
    }

    private fun loadData() {
        val pref = getSharedPreferences("title", 0)
        binding.etName.setText(pref.getString("name", "")) // key의 value값, 없으면 ""
    }

    private fun initData() {
        binding.btnSave.setOnClickListener {
            saveData()
            Toast.makeText(this, "Data Saved.", Toast.LENGTH_SHORT).show()
        }
        loadData()
    }

 

실습 2

2개의 Activity에서 데이터를 저장하고 받는 코드(const 사용)

더보기
const val USER_INFORMATION = "userInformation"
const val NAME = "name"
const val AGE = "age"

 

데이터를 입력하는 Activity에서 editText에 입력

//subActivity
    private fun saveData() {
        with(getSharedPreferences(USER_INFORMATION, Context.MODE_PRIVATE).edit()) {
            putString(NAME, binding.etName.text.toString())
            putString(AGE, binding.etName.text.toString())
            apply()
        }
        Toast.makeText(this, "저장을 완료했습니다.", Toast.LENGTH_SHORT).show()
    }

 

입력받은 데이터 받기

	//MainActivity
	private fun getDataUiUpdate() {
        with(getSharedPreferences(USER_INFORMATION, Context.MODE_PRIVATE)) {
            binding.tvName.text = getString(NAME, "미정")
			binding.tvAge.text = getString(AGE, "미정")
        }
    }

 

 데이터 삭제 버튼으로 삭제하기

    private fun deleteData() {
        with(getSharedPreferences(USER_INFORMATION, MODE_PRIVATE).edit()) {
            clear()
            apply()
            getDataUiUpdate()
        }
        Toast.makeText(this, "데이터를 삭제했습니다.", Toast.LENGTH_SHORT).show()
    }

 

 

 

 

 

 

 

 

 

 

 

ref

 

SharedPreferences로 단순 데이터 저장하기  |  Android Developers

DataStore offers a more modern way of storing local data. You should use DataStore instead of SharedPreferences. Read the DataStore guide for more information. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. SharedPreferences로 단

developer.android.com

 

'Kotlin > TIL' 카테고리의 다른 글

Postman 사용하기 (TIL 05.02)  (0) 2024.05.02
Android -GoogleMap 사용 (TIL 05.01)  (0) 2024.05.01
TIL (04.29) - LiveData 실습  (0) 2024.04.29
TIL (04.23)  (0) 2024.04.23
TIL (04.22)  (0) 2024.04.22