20230914 getSharedPreferences

기메단·2023년 9월 14일
1

TIL

목록 보기
43/44

SharedPreferences이란

  1. 안드로이드 개발에서 데이터를 저장하는 방법 중 하나로, 간단한 데이터를 저장하고 불러올 수 있다. (초기 설정 값, 자동로그인 여부 등등)
  2. 데이터가 많거나 중요한 데이터를 저장해야 하는 경우는 getSharedPreferences를 사용하면 공간 낭비이므로 DB에 저장하여야 한다.

특징

  1. map 구조로 (key, value) 형태로 저장한다.
  2. 애플리케이션이 삭제 되기 전까지 데이터를 가지고 있음.
  3. 애플리케이션에 파일 형태로 데이터 저장.

mode (파일의 공유 모드)

  1. MODE_PRIVATE : 생성한 애플리케이션에서만 사용 가능.
  2. MODE_WORLD_READABLE : 외부 앱에서 사용 가능하지만 읽기만 가능.
  3. MODE_WORLD_WRITEABLE : 욉부 앱에서 사용 가능하고 읽기, 쓰기 가능.

2,3 번은 보안상 이유로 API level 17에서 deprecated됨

저장/호출

  • 저장
private fun saveData() {
        val pref = getSharedPreferences("pref", 0)
        val edit = pref.edit()
        edit.putString("name", binding.edit.text.toString())
        edit.apply()
    }

edit() 선언 후 putString, Boolean, Int 등으로 자료형을 입력해 저장할 수 있다.

apply() : 비동기적으로 변경 사항을 저장하고, 블록 되지 않음.
commit() : 동기적으로 변경 사항을 저장하고, 저장이 완료될 때까지 블록된다.

  • 호출
private fun loadData() {
        val pref = getSharedPreferences("pref", 0)
        binding.edit.setText(pref.getString("name", ""))
    }

geString, getBoolean, getInt 등으로 저장한 데이터를 읽어올 수 있다. (key, value)로 읽어오는 것을 잊지말자.

삭제

        val pref = getSharedPreferences("pref", 0)
        val edit = pref.edit()
        
        editor.remove("key값")
        editor.apply() // 적용
        
        // 전체 삭제는 editor.clear()

전체 코드

class MainActivity : AppCompatActivity() {

    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.save.setOnClickListener {
            saveData()
            Toast.makeText(this, "data saved", Toast.LENGTH_SHORT).show()
        }
        loadData()
    }

    private fun saveData() {
        val pref = getSharedPreferences("pref", 0)
        val edit = pref.edit()
        edit.putString("name", binding.edit.text.toString())
        edit.apply()
    }

    private fun loadData() {
        val pref = getSharedPreferences("pref", 0)
        binding.edit.setText(pref.getString("name", ""))
    }
}

다른 예제

class MainActivity : AppCompatActivity() {

    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        val sharedPref = getSharedPreferences("my_pref", Context.MODE_PRIVATE)

        binding.save.setOnClickListener {
            sharedPref.edit().run {
                putString("data1", binding.edit.text.toString())
                putBoolean("data2", binding.check.isChecked)
                commit()
                Toast.makeText(binding.root.context, "data saved", Toast.LENGTH_SHORT).show()
            }
        }
        binding.get.setOnClickListener {
            val data1 = sharedPref.getString("data1", "none")
            val data2 = sharedPref.getBoolean("data2", false)
            binding.result.text = "data1: $data1, data2: $data2"
        }
    }
}

0개의 댓글