-
SharedPreferencesAndroid 2024. 5. 1. 21:27
gif 파일 용량이 커서 압축해보려하는데 40분째 방법을 찾았지만, 해결이 안돼서 일단 업로드를 못하게 되었다.
이유를 모르겠는게 두 gif 파일 모두 영상 길이가 비슷한데 저번에 찍은건 4MB인데, 이번엔 20MB를 넘어간다.
왜그러지? 모르겠다... 당장 해결하기는 힘들어서 이 부분은 스킵한다.
앱에 어떤 데이터를 입력한 상태에서 앱을 종료하게 되었을때, 해당 데이터가 남아있으려면 어떻게 해야할까?
이때 필요한 개념이 sharedpreferences 이다.
일단 예제 코드를 한번 봐보자.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) binding.btnSave.setOnClickListener { saveData() Toast.makeText(this@MainActivity,"데이터가 저장되었습니다!",Toast.LENGTH_SHORT).show() } loadData() }
어떤 버튼이 눌렸을 때 saveData() 라는 메소드를 실행하고, 이후에는 loadData() 메소드를 실행하도록 코드가 구성되어 있다.
private fun saveData() { val pref = getSharedPreferences("file_name", MODE_PRIVATE) val edit = pref.edit() // 수정 모드 edit.putString("key",binding.etSharedpreference.text.toString()) // (키,담아둘 값) edit.apply() // 저장완료 }
getSharedPreferences 인자에다가 생성할 파일 이름과 파일 공유 모드를 넣어준다.
Device Explorer의 data > data > 프로젝트 파일 경로(나의 경우 com.example.lab3_dice) > shared_prefs 에서 첫번째 인자로 넣어준 xml 파일명을 확인할 수 있다.
첫번째 인자에 대한 xml 파일 생성 코드를 다시 이어서 설명하자면, 생성한 pref 변수에다가 edit() 메소드를 통해 edit 변수를 생성한다.
edit 에다가 putString을 통해 (key,value) 형태로 사용자가 직접 입력했던 값을 value 값으로 넣어준다.
마지막에 apply 함수까지 하면 해당 파일에 저장이 된다.
파일에 들어갔더니 올바르게 저장된 것을 확인할 수 있다. (기준은 앱을 실행한 후이다)
private fun loadData() { val pref = getSharedPreferences("file_name", MODE_PRIVATE) // 첫번째 인자는 받아올 데이터의 key 값, 2번째 인자는 데이터가 존재하지 않을 경우의 값 binding.etSharedpreference.setText(pref.getString("key","null")) }
loadData() 함수는 무엇을 의미하냐면, 앱을 실행했을 때 전에 사용자가 입력한 값을 보여주는 것이다.
아까 선언한 pref 변수를 다시 선언해주고 pref에다가 getString 을 통해서 저장한 데이터 값을 key 를 통해 받아오면 된다.
첫번째 인자에는 key 값이 들어가고(putString에서 입력했던 key값), 두번째는, 입력한 데이터 값이 없을 경우 보여줄 값을 넣어주면 된다. (그래서, 시연 영상에서 맨 처음에 null 값이 보여지는 것을 확인할 수 있다.)
'Android' 카테고리의 다른 글
시간복잡도 줄이기(약수의 개수) (0) 2024.05.03 MVC, MVVM, Repository Pattern (0) 2024.05.02 알림(Notification) (0) 2024.04.30 Multi View Type RecyclerView (0) 2024.04.29 다이얼로그 (0) 2024.04.25