SharedPreferences는 앱에서 데이터를 저장하는 방법중에 하나로, 앱 내부 DB 라 말할 수 있다
예를들어, 로그인을 할 때 앱 재실행 시 최근 로그인 한 아이디를 표시하기 위해 아이디 저장 여부가 필요할 때
DB에 저장할 필요가 없이 앱 내부에 저장을 하면 된다. 이때 사용하면 좋은 것이 SharedPreferences 이다
다른 DB와 다르게 SharedPreferences는 간단한 데이터를 저장하기 위해 사용한다. (SharedPreferences에는 큰 값을 저장하거나 많은 값을 저장하면 앱이 느려질 수 있으니 작은 값들을 적게 저장해야한다)
또한 앱 내부에 xml 파일로 저장이 되며 데이터와 함께 설정된 keyValue 를 통해 Save/Load 할 수 있다.
데이터의 보존은 앱이 삭제되기전까지는 유지된다
간단한 예제앱을 만들어볼것이다
EditText를 만들어서 text 입력 후, 앱을 나갔다가 다시 돌아와도 입력했던 EditText데이터가 그대로 유지될 수 있도록 SharedPreferences를 사용해서 만들어볼 것이다
먼저 EditText와 버튼이 있는 xml화면을 디자인해준다
class MainActivity : AppCompatActivity() {
private val binding : ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.nextBtn.setOnClickListener {
val intent = Intent(this, MemoCheckActivity::class.java)
val memoTxt = binding.memoEt.text.toString()
intent.putExtra("memo", memoTxt)
startActivity(intent)
}
}
MainActivity.kt
텍스트 입력후 작성완료 버튼을 누르면 MemoCheckActivity로 전환되면서 입력한 값을 전달해주도록 하자
class MemoCheckActivity : AppCompatActivity() {
private val binding : ActivityMemoCheckBinding by lazy {
ActivityMemoCheckBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
if(intent.hasExtra("memo")) {
binding.memoCheckText.text = intent.getStringExtra("memo")!!
}
}
}
MemoCheckActivity.kt
activity_memo_check.xml에는 텍스트만 있는 간단한 화면으로 디자인해주었고
코틀린 파일로 넘어와서 받아온 데이터를 Text에 뿌려주자
# SharedPreferences 사용해서 EditText내용 저장하기
방금 만든부분까지하고 앱을 나갔다 들어오면 작성한 데이터가 저장이 안될것이다
이제 SharedPreferences를 사용해서 앱을 나갔다 들어와도 데이터가 저장되게 수정해줄것이다
MainActivity에서 onPause()가 호출되었을때 SharedPreferences를 사용하여 작성중이던 메모를 저장해주었다
재시작되었을 때도, SharedPreferences에서 값을 가져오기 위해 onResume() 콜백 메서드도 오버라이딩 해주었다
getSharedPreferences는 getSharedPreferences(name, mode) 형태로 사용할 수 있다
- name : 프레퍼런스 데이터를 저장할 XML 파일의 이름
- mode : 파일의 공유 모드
- MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기 가능
- MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated됨
값을 저장할 때는 put메서드를 , 저장한 값을 꺼낼때는 get메서드를 사용해주면 된다
(get메서드에서는 default값을 설정해줘야한다)
// onPause() 상태가 되었을때, 작성중이던 메모 getSharedPreferences통해 저장
override fun onPause() {
super.onPause()
val sharedPreferences = getSharedPreferences("memo", MODE_PRIVATE)
val edit = sharedPreferences.edit()
val tempMemo = binding.memoEt.text.toString()
// 데이터 저장
edit.putString("tempMemo", tempMemo)
edit.apply() // 저장완료
}
// 재시작 되었을때 SharedPreferences에서 값을 가져오기위해 onResume에도 작성
override fun onResume() {
super.onResume()
val sharedPreferences = getSharedPreferences("memo", MODE_PRIVATE)
// default값 설정해줘야함 -> 데이터가 null일떄(존재하지 않을떄의 값)
// getString을 이용해 데이터를 꺼내서 사용
val tempMemo = sharedPreferences.getString("tempMemo", null)
binding.memoEt.setText(tempMemo)
}
MainActivity.kt
# 실행화면
이제 실행결과를 보면 이렇게 앱을 나갔다 들어와도 내가 작성한 데이터가 잘 저장이 된것을 확인해볼 수 있다
# 참고자료
https://winterpoet-kim.tistory.com/13
[Android, Kotlin] SharedPreferences
1. SharedPreferences 가 뭐야? 간단하게, 앱에서 데이터를 저장하는 방법중에 하나로 앱 내부 DB 라 말할 수 있다. SharedPreferences는 간단한 값을 저장할 때 주로 사용하는데 이러한 값들이 매번 저장될
winterpoet-kim.tistory.com
https://velog.io/@ys4897/kotlin-SharedPreferences
(kotlin) SharedPreferences
Preference란? SharedPreferences는 간단한 값을 저장할 때 주로 사용한다. 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장할 때 DB를 사용하면 복잡하기 때문에 SharedPreferences를 사용하면 적합하
velog.io
[Android] Kotlin SharedPreferences 사용
데이터베이스로 Room과 Firebase만 사용하던 도중 SharedPreferences가 있다는 것을 알게되어 정리해보려 한다. 먼저 SharedPreferences란 안드로이드 플랫폼에서 데이터를 영구적으로 저장하고 검색하기 위
izongg.tistory.com
'개발 노트 > Kotlin' 카테고리의 다른 글
[Android/Kotlin] 사용자 위치 얻기 (0) | 2024.05.01 |
---|---|
[Android/Kotlin] Room DataBase 활용 예제 (0) | 2024.05.01 |
[Android/Kotlin] 멀티뷰타입 리사이클러뷰 MVVM패턴으로 수정(Observer Pattern 사용) (0) | 2024.04.29 |
[Android/Kotlin] Multi View Type 리사이클러뷰 구현하기 (0) | 2024.04.14 |
[Android/Kotlin] Text에 밑줄 표시하기 (0) | 2024.04.14 |