키와 값을 쌍으로 내부 저장소에 데이터를 저장시켜주는 Preferences는 앱에서 사용하는 간단한 설정 내용이나 기타 필요한 값을 쉽게 저장하고 가져올 수 있도록 합니다. 참고로 설정값은 내부 저장소에 XML형태로 데이터를 보관합니다.
Preferences를 알아보기 전에 우선 Activity화면에서 아래와 같이 버튼 하나를 추가합니다.
그리고 버튼 클릭에 대한 리스너를 작성해 주세요. 아래부터 생성되는 코드는 이 리스너안에서 작성할 것입니다.
Preferences를 사용하려면 당연히 Preference 파일을 생성해야 하는데 사용하고자 하는 범위에 따라 2가지 생성 방법이 존재합니다. 첫 번째로는 여러 Activity에서 공유할 수 있도록 생성하는 방법이며 아래와 같습니다.
val myPF = getSharedPreferences("XML파일명", Context.MODE_PRIVATE)
첫 번째 매개변수에 저장될 파일명을 지정하고 두 번째 매개변수에 접근권한을 설정합니다. 접근권한은 여러 가지가 사용되었으나 대부분 MODE_PRIVATE으로 주면 충분합니다.
만약 Activity마다 개별적으로 Preferences를 사용해야 하거나 Activity가 하나뿐이어서 하나의 설정 파일만을 필요로 한다면 다음과 같이 현재 생성하는 Acivity의 이름으로 파일을 단독으로 생성할 수 있습니다.
var myPF = getPreferences(Context.MODE_PRIVATE)
Preference가 생성되면 edit() 메서드를 호출하여 값을 추가하면 됩니다.
var myPF = getPreferences(Context.MODE_PRIVATE)
var editor = myPF.edit()
단, 키와 값을 사용해 값을 추가했으면 마지막에 반드시 apply() 메서드를 호출해야 지정한 키와 값이 모두 저장됩니다. apply() 이외에 commit()이라는 메서드도 존재하는데 apply()는 비동기로 값을 저장하는 반면 commit()은 동기적으로 값을 저장한다는 차이가 있습니다. 동기방식으로 값을 저장하는 경우 저장이 모두 완료되지 않으면 앱의 동작이 일시적으로 중지될 수 있으므로 주의가 필요합니다.
var myPF = getPreferences(Context.MODE_PRIVATE)
var editor = myPF.edit()
editor.putString("name", "홍길동")
editor.apply()
예제에서는 값을 저장하는데 putString()을 사용했으나 저장하고자 하는 데이터 타입별로 원하는 메서드를 사용할 수 있습니다.
putFloat | Float |
putLong | Long |
putInt | Int |
putString | String |
putBoolean | Boolean |
putStringSet | Set |
저장된 값은 put과는 반대인 get- 함수를 사용해 가져올 수 있으며 뒤에 붙이는 데이터 형식도 동일합니다.
var myPF = getPreferences(Context.MODE_PRIVATE)
var editor = myPF.edit()
editor.putString("name", "홍길동")
editor.apply()
var content = myPF.getString("name", "홍길순")
Toast.makeText(this, content, Toast.LENGTH_LONG).show()
예제에서 getString() 사용시 뒤에 '홍길순'이라는 값을 붙였는데 put과 달리 get에서 두 번째 매개변수 값은 지정한 키의 값이 존재하지 않는 경우 대신 가져올 기본값을 지정하는 것입니다.
앱을 실행하고 버튼을 누르게 되면 일련의 코드들이 실행되면서 결과를 Toast로 표시할 것입니다.
이 밖에 특정 키의 값을 삭제하는 경우에는 remove()를 통해 키를 지정해 삭제할 수 있으며
editor.remove("name")
모든 설정값을 삭제하는 경우에는 clear() 메서드를 호출하면 됩니다.
editor.clear()
'Mobile > Kotlin' 카테고리의 다른 글
[kotlin] SQLite - SQLite Open Helper 구현하기 (0) | 2020.12.29 |
---|---|
[kotlin] androidx.preference (0) | 2020.12.28 |
[kotlin] 저장소및 파일처리 (0) | 2020.12.24 |
[kotlin] 권한 처리하기 (0) | 2020.12.23 |
[Kotlin] 위젯 - ViewPager2 (0) | 2020.12.23 |