[Android 앱 개발 심화] 1. SharedPreferences

0
post-thumbnail
post-custom-banner

[Android 앱 개발 심화] 1. SharedPreferences

📌참고자료:Save simple data with SharedPreferences | Android DEvelopers

SharedPreferences

  • Preferences의 데이터(키-값 세트) 관리 클래스
  • 응용 프로그램 내의 액티비티 간에 공유
    (한 쪽 액티비티에서 수정 시, 다른 액티비티에도 수정된 값 읽기 가능)
  • 응용 프로그램 외부에서 읽기 불가능
  • 사용 가능한 데이터 타입:

공유 환경설정의 핸들 가져오기

  • shared preference 파일 새로 생성/존재하는 파일 접근하는 방법:
    (1) getSharedPreferences 메서드: 이름으로 구분되는 여러 개의 shared preference 파일이 필요한 경우 사용
    (2) getPreferences 메서드: Activity에서 하나의 shared preference 파일이 필요한 경우 사용, 이름 지정할 필요 X
    -> retrieves a default shared preference file that belongs to the activity
    (3) getDefaultSharedPreference 메서드: 앱 전체 설정 저장이 필요한 경우 사용
    -> retrieves a default shared preference file for your entire app

getSharedPreferences 메서드

val sharedPref = activity?.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE)
  • getSharedPreferences(name,mode)
    • name: Preference 데이터를 저장할 XML 파일의 이름
      • should use a name that's uniquely identifiable to your app
        (-> prefix the file name with your application ID)
    • mode: 파일 공유 모드
      • MODE_PRIVATE: 호출한 애플리케이션 내부에서만 읽기 가능

getPreferences 메서드

val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)

Write to shared preferences

  • shared preference 파일을 편집하기
    (1) SharedPreferences에 edit() 함수를 호출하여 SharedPreferences.Editor를 생성하기
    (2) 키-값 쌍 함수로 저장하기 (ex.putInt(), putString())
    (3) apply() 또는 commit() 함수를 호출하여 변경사항 저장하기
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    putInt(getString(R.string.saved_high_score_key), newHighScore)
    apply()
}
  • apply(): changes the in-memory SharedPreferences object immediately but writes the updates to disk asynchronously
  • commit(): write the data to disk synchronously
    (-> should avoid calling from main thread)

Read from shared preferences


val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)
val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)

예제

  • 앱을 닫았다 열어도, EditText에 입력한 text가 남아있도록 하기
class MainActivity : AppCompatActivity() {

    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.btnSave.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.etHello.text.toString())
        edit.apply() 
    }

    private fun loadData() {
        val pref = getSharedPreferences("pref",0)
        binding.etHello.setText(pref.getString("name",""))
    }
}
profile
Be able to be vulnerable, in search of truth
post-custom-banner

0개의 댓글