안녕하세요
오늘은 SharedPreference에 ArrayList, HashMap을 저장하는 방법에 대해 알아보고자 합니다
우선, SharedPreference에 대해 잘 모르시는 분이라면
2021.01.19 - [Android] - [Android] SharedPreferences 사용하기 를 보고 오시는 것을 추천드립니다 :)
소스는 Kotlin으로 작성했습니다
1. ArrayList 저장하기
SharedPreference에는 ArrayList를 저장을 하기 위해선, 아래의 과정을 거쳐야합니다
ArrayList ➡️ JSONArray ➡️ toString()
JSONArray로 변경한 뒤 String으로 변경해서 저장하는 방식입니다
// 1) ArrayList
var arr : ArrayList<String> = ArrayList()
arr.add(0, "킬빌")
arr.add(1, "저수지의 개들")
arr.add(2, "바스터즈")
// 2) JsonArray
var jsonArr = JSONArray()
for(i in arr){
jsonArr.put(i)
}
// 3) toString()
var result = jsonArr.toString()
val sharedPref = getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putString("지정한 KEY값", result)
commit()
}
string으로 변경하는 방법은 JSONArray를 toString()하면 끝이기에 소스가 그리 복잡하진 않습니다
2. ArrayList 불러오기
불러올 땐, 저장할 때와 반대의 과정을 거칩니다
getString() ➡️ JSONArray ➡️ ArrayList에 Add
// 1)
val getShared = shared.getString("KEY", "")
// 2)
var resultArr : ArrayList<String> = ArrayList()
var arrJson = JSONArray(getShared)
// 3)
for(i in 0 until arrJson.length()){
resultArr.add(arrJson.optString(i))
}
// 출력
for(i in resultArr.indices){
Timber.i(resultArr[i])
}
출력 시엔 resultArr을 가져와서 찍어주면 됩니다
킬빌
저수지의 개들
바스터즈
📌 optString() : getString()은 존재하지 않는 값이면 Exception이 발생하지만, optString()을 사용하면 empty String을 반환해줍니다.
3. HashMap 저장하기
HashMap은 광범위하게 많이 사용되는 클래스이기 때문에 중요합니다
마찬가지로, HashMap에 대해 모르시는 분이라면 아래의 포스팅을 참조해주세요 🙂
2020.10.18 - [Java] - [Java/Kotlin] HashMap을 사용해보자
HashMap 저장도 데이터를 스트링으로 JSON형태의 String으로 변경한 후 저장하는 작업을 거칩니다
다만, ArrayList 저장과 차이가 있다면 HashMap에서는 JSONObject를 사용합니다
HashMap 생성 ➡️ JSONObject ➡️ toString()
// 1)
var hash = HashMap<String, String>()
hash["movie"] = "lala land"
hash["music"] = "city of star"
// 2)
val json = JSONObject(hash as Map<*, *>)
// 3)
val shared = getPreferences(Context.MODE_PRIVATE) ?: return
with(shared.edit()){
putString("KEY", json.toString())
commit()
}
⚠ 여기서 주의할 점은 JSONObject로 변경 시, (Mutable)Map<*,*>의 형태를 사용해야 하기 때문에
hash를 Map<*, *> (as Map<*, *>)으로 변경해줍니다
4. HashMap 가져오기
가져오는 경우는 2번과 비슷합니다
JSONObject로 변환한 후, String의 형태로 가져오면 됩니다
getString() ➡️ JSONObject ➡️ toString()
// 1)
var sharedStr = shared.getString("KEY", "")
var result = ""
if(sharedStr != ""){
// 2)
var obj = JSONObject(sharedStr)
// 3)
result = obj.optString("movie","")
}
HashMap은 KEY-VALUE의 형태로 저장되기 때문에 "movie" 자리에 원하는 KEY값을 입력하면 Value를 가져옵니다.
편하게 쓰시려면 key값을 매개변수로 받는 함수로 만드는 것도 하나의 방법입니다
오늘 포스팅은 조금 길어졌네요
혹시 잘못된 내용이나 궁금한 점이 있으면 댓글 부탁드립니다
감사합니다 🥰
'📱 Android' 카테고리의 다른 글
[Android] 앱 설치여부 확인 및 플레이스토어 이동 (0) | 2021.12.27 |
---|---|
[Android] RecyclerView (1) - Multi ViewHolder (0) | 2021.05.15 |
[Android] FirebaseInstanceID Deprecated (0) | 2021.03.08 |
[Android] OS 점유율 & minSdkVersion (0) | 2021.01.27 |
[Android] SharedPreferences 사용하기 (0) | 2021.01.19 |