안드로이드 With Java #25 Shared Preference
앱을 껐다 켰을 때도 이전의 상태가 복원하고 싶은 경우 데이터베이스에 저장을 해야 가능한데, 간단하게 데이터베이스를 사용할 수 있도록 만들어주는 것이 Shared Preferences
임.
Key-Value
형식으로 저장data/data/PackageName/shared_prefs/이름
경로에 저장Boolean
, Integer
, Float
, Long
, String
을 저장 가능GSON
라이브러리를 사용하면 객체도 저장 가능MODE_PRIVATE
: 해당 app 내에서만 사용 가능MODE_WORLD_READABLE
: 다른 app에서 읽기가 가능MODE_WORLD_WRITABLE
: 다른 app에서 쓰기가 가능위와 같이 getSharedPreferences()
라는 메소드를 통해 가져올 수 있다. 단, SharedPreferences
의 이름과 어떤 MODE
로 가져올 것인지를 인자로 잘 주어야 한다.
이전에 생성했던 sharedPreferences
로 부터 Editor
를 가져와야 하는데, sharedPreferences.edit()
메소드로 Editor
를 가져올 수 있다. Editor
의 타입은 SharedPreferences.Editor
이다.
그리고 가져온 Editor
에 put...()
메소드를 수행하여 값을 넣을 수 있다. 그리고 값을 다 넣은 뒤에는 반드시 commit()
을 해주어야 한다.
SharedPreferences
에 값을 넣을 때는 Editor
의 put...()
메소드를 이용한 반면에, SharedPreferences
에서 값을 가져올 때는 SharedPreferences
인스턴스에서 get...()
메소드를 이용하여 가능하다.
getString()
메소드의 두번째 인자는 실패 시에 가져올 문자열이다.
Log.d()
로 값이 잘 들어왔는지 확인해보자
실패
가 나오지 않고 아까 넣었던 안녕하세요
문자열이 잘 나온다.
이번엔 사전에 넣어주지 않은 Undefined Key Value
라는 문자열을 넣어보았다.
실패라는 문자열이 잘 나온다.
위와 같이 remove()
메소드 또는 clear()
메소드로 값 삭제가 가능한데, 값 하나를 삭제하고 싶을 때는 remove()
메소드를 쓰면 좋고, 전체를 삭제하고 싶을 때는 clear()
메소드를 쓰면 좋다.
Editor
를 사용한 뒤에는 언제나 commit()
을 해야 반영이 된다.
기존에 저장된 값을 삭제한 뒤에, 위와 같이 value
를 다시 불러왔다.
기존에는 app
단위 build.gradle
내부의 dependencies
항목에 직접 문자열을 추가해서 의존성을 추가했는데, 이 방법 말고 다른 방법으로 추가할 수 있다.
간단하게 멤버 변수로 name
과 age
를 넣고, 생성자만 만들어주었다.
위와 같이 Gson
객체를 만들어서 Gson
객체의 toJson()
메소드에 Person
객체인 person
을 인자로 넘겨 문자열 JSON 형태로 만들었다.
로그를 출력해보면 다음과 같이 나온다.
Key-Value
형태의 JSON으로 잘 변형되었다.
JSON String
도 결국엔 문자열이기 때문에 저장하는 방법은 이전에 문자열을 저장하던 방법과 동일하다.
commit()
메소드를 해주는 것을 잊지말자.
객체로 변환할 때도 Gson
을 이용한다.
Gson
에 내장되어 있는 fromJson()
메소드를 사용하면, JSON String
을 특정 클래스로 변환할 수 있다.
위와 같이 personJsonString
이라는 곳에 JSON String
을 다시 불러오고, Gson
의 fromJson()
메소드를 통해 JSON String
을 다시 클래스로 변환하여 retrievedPerson
이라는 Person
타입의 변수에 저장하였다.
불러온 retrievedPerson
이 정상적으로 작동하는지 확인해보았다.
잘 불러와진 것을 볼 수 있다.
문자열, 정수, 객체, 불리언 타입 등 많은 자료를 저장해놓고 쓸 수 있다.
앱이 껐다 켜져도 유지되어야 할 데이터들을 저장해보자.