목표: sharedPreference에 ArrayList 를 저장하기
내가 저장하고자 하는 Object, MessageDTO 는 Json 형식은 이렇고
MessageDTO
{
"title": "write anythig",
"body": "test body",
"timestamp":"2022-03-01 11:11:11.111"
}
이렇게 list가 되도록 하는 것이 목표이다.
ArrayList< MessageDTO >
[
{
"title": "write anythig1",
"body": "test body",
"timestamp":"2022-03-01 11:11:11.111"
} ,
{
"title": "write anythig2",
"body": "test body",
"timestamp":"2022-03-01 11:11:11.111"
}
,
{
"title": "write anythig3",
"body": "test body",
"timestamp":"2022-03-01 11:11:11.111"
}
]
첫번째로 build.gradle에서 dependencies에 Gson 라이브러리를 추가해주자.
implementation 'com.google.code.gson:gson:2.8.5'
Gson은 Json 형식을 객체로 만들어준다.
tempArray.addAll(gson.fromJson(prev,groupListType))
tempArray.add(data)
val groupListType: Type = object : TypeToken<ArrayList<MessageDTO?>?>() {}.type
// 이 부분이 중요하다. Json을 객체로 만들 때 타입을 추론하는 역할을 한다.
gson.toJson(tempArray,groupListType)
val title = Message["title"]
val body = Message["body"]
val timestamp= Message["timestamp"]
val spf = getSharedPreferences("notification", MODE_PRIVATE) // 기존에 있던 데이터
val editor =spf.edit()
val gson = GsonBuilder().create()
val data = MessageDTO(title, body,timestamp)
val tempArray =ArrayList<MessageDTO>()
val groupListType: Type = object : TypeToken<ArrayList<MessageDTO?>?>() {}.type // 이 부분이 중요하다. Json을 객체로 만들 때 타입을 추론하는 역할을 한다.
val prev =spf.getString("messageList","none") // json list 가져오기
val convertedData = gson.toJson(prev)
if(prev!="none"){ //데이터가 비어있지 않다면?
if(prev!="[]" || prev!="")tempArray.addAll(gson.fromJson(prev,groupListType))
tempArray.add(data)
val strList = gson.toJson(tempArray,groupListType)
editor.putString("messageList",strList)
}else{
tempArray.add(data)
val strList = gson.toJson(tempArray,groupListType)
editor.putString("messageList",strList)
}
editor.apply()
}