gson 사용 및 helpercalss
fun saveBookmarkData(context: Context,list: List<BookmarkModel>?) {
if (list == null) return
val sharedPrf =
context.getSharedPreferences(NAME_BOOKMARK_PRF, Context.MODE_PRIVATE)
val editor = sharedPrf.edit()
val json = Gson().toJson(list)
editor.putString(KEY_BOOKMARK_LIST, json)
editor.apply()
}
fun loadBookmarkData(context: Context): List<BookmarkModel> {
val sharedPrf =
context.getSharedPreferences(NAME_BOOKMARK_PRF, Context.MODE_PRIVATE)
val json = sharedPrf.getString(KEY_BOOKMARK_LIST, null)
return Gson().fromJson(json, object : TypeToken<List<BookmarkModel>>() {}.type)
?: emptyList()
}
해당 gson을 사용하는 방법은 블로그를 참고해서 그대로 만든 코드다.
gson을 사용하여 json으로 리스트를 변경시켜 string형태로 만들어준다.
그 이후 그 값을 sharedprf에 저장했다가 load하면서 역직렬화를 해주는 코드다.
private fun initViewModel() {
with(bookmarkViewModel) {
val loadBookMark = BookMarkSharedPrfHelper.loadBookmarkData(requireContext())
loadData(loadBookMark)
bookmarkList.observe(viewLifecycleOwner) {
bookMarkAdapter.submitList(it)
//북마크 저장
BookMarkSharedPrfHelper.saveBookmarkData(requireContext(), bookmarkList.value)
}
}
with(sharedViewModel) {
liveSearchModel.observe(viewLifecycleOwner) {
val updateBookmarkModel =
liveSearchModel.value?.toBookmarkModel() ?: return@observe
Log.d("북마크.도착", updateBookmarkModel.toString())
Log.d("북마크.리스트", bookmarkViewModel.bookmarkList.value.toString())
bookmarkViewModel.compareItem(updateBookmarkModel)
}
}
}
따라서 bookmarkList를 observ해서 변경사항이 있을 때 마다 save매소드를 생성해주고
최초 실행시 loaddata를 싱행시켜준다.
loaddata는 viewmodel에 있는 메소드로
fun loadData(items:List<BookmarkModel>){
_bookmarkList.value = items
}
의 형식을 사용해주었다.
참고 사이트
1. gson
https://win-record.tistory.com/30
[Android] SharedPreferences ArrayList 저장하기
⚠️ 2021.01.21에 작성된 글입니다 ⚠️ SharedPreferences에 ArrayList 저장하기 [Android] SharedPreferences 데이터 저장하기에서 살펴봤듯, SP로 데이터를 저장할 때에는 저장이 가능한 데이터타입이 한정적이
win-record.tistory.com
2. sharedprfhelper
https://stackoverflow.com/questions/35912227/sharedpreferences-helper-class
SharedPreferences helper class
I am doing SharedPreferences helper class to make my code looks nice. public class SharedPreferencesHelper { Context context; public SharedPreferencesHelper(Context context){ this.
stackoverflow.com
'개발노트 > Kotlin' 카테고리의 다른 글
12주차 1일 horizontal recyclerview (0) | 2023.09.25 |
---|---|
11주차 5일차 리포지토리 (1) | 2023.09.22 |
11주차 2일 키 리스너 (0) | 2023.09.19 |
11주차 1일 api숨기 (0) | 2023.09.18 |
10주차 5일 금 뷰모델 개선 (0) | 2023.09.15 |