본문 바로가기
개발노트/Kotlin

11주차 3일 sharedprfernce

by 시계속세상은아직돌아가는중 2023. 9. 20.

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