Preference에 Json 저장하기

지프치프·2022년 11월 6일
0

Android

목록 보기
55/85
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

간혹 Preference에 Json 데이터를 저장하고 싶을 때가 있다.
Preference 자체에서 Json 형식을 지원하는 것은 아니지만
String으로 바꾼 다음에 저장하고 불러오는 방식으로 사용이 가능하다.
아래의 코드로 확인해보자

Code

Preference
이전에 포스팅했던 Preference 글을 참고하고 오면 이해하기 더 쉬울 것이다.
위 글에서 만든 것처럼 싱글톤으로 구현해서 사용하였다.
예제 코드를 보기 앞서 필자가 사용한 Data Class는 아래와 같다.

data class CharacterRows(
    @Expose
    @SerializedName("serverId")
    val serverId: String,
    @Expose
    @SerializedName("characterId")
    val characterId: String,
    @Expose
    @SerializedName("characterName")
    val characterName: String,
    @Expose
    @SerializedName("level")
    var level: Int,
    @Expose
    @SerializedName("jobId")
    val jobId: String,
    @Expose
    @SerializedName("jobGrowId")
    val jobGrowId: String,
    @Expose
    @SerializedName("jobName")
    val jobName: String,
    @Expose
    @SerializedName("jobGrowName")
    val jobGrowName: String
)

저장하기

val rowJson = Gson().toJson(row)
Pref.getInstance(itemView.context)?.setValue(Pref.CHARACTER_INFO, rowJson)

toJson()의 매개변수로 객체를 넘겨주면
Json을 String으로 변환해서 반환한다.
그럼 그 값을 Preference에 String으로 저장해주면 된다.
변환된 값은 대략 아래와 같다.

<string name="CHARACTER_INFO">{&quot;characterId&quot;:&quot;3ee9819124570a63de82895bd352196a&quot;,&quot;characterName&quot;:&quot;고산대광&quot;,&quot;jobGrowId&quot;:&quot;64bbd751c0fcae0e74758b871a2296c1&quot;,&quot;jobGrowName&quot;:&quot;드레드노트&quot;,&quot;jobId&quot;:&quot;0ee8fa5dc525c1a1f23fc6911e921e4a&quot;,&quot;jobName&quot;:&quot;나이트&quot;,&quot;level&quot;:91,&quot;serverId&quot;:&quot;cain&quot;}</string>

불러오기

위에서 설명한 저장하기의 역순으로 생각하면 된다.
Preference에서 String을 불러온 다음
Gson을 이용해서 다시 객체로 변환하는 방식이다.

val jsonString = Pref.getInstance(this)?.getString(Pref.CHARACTER_INFO)
val row = Gson().fromJson(jsonString, CharacterRows::class.java)

fromJson()의 매개변수는 (String json, Class<T> classOfT)로써
첫번째에 Json, 두번째에 해당 Json을 변환할 Target Class를 적어주면 된다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글