가장 먼저 gradle에 Gson의존성을 추가합니다.
//Gson 라이브러리 추가
implementation("com.google.code.gson:gson:2.8.8")
의존성을 작성했으면 동기화(Sync)를 해야합니다.
작성후 저장하면 상단에 표시되는 Sync Now버튼을 클릭 하여 동기화를 해줍니다.
이후 MainActivity에 추가로 아래 코드를 작성하겠습니다.
package com.xml.androidlab
import android.content.Context
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
class MainActivity : AppCompatActivity() {
private val memoList = mutableListOf<String>()
private lateinit var adapter: MemoAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// EditText, Button, RecyclerView 참조
val editTextMemo = findViewById<EditText>(R.id.editTextMemo)
val buttonAddMemo = findViewById<Button>(R.id.buttonAddMemo)
val recyclerViewMemos = findViewById<RecyclerView>(R.id.recyclerViewMemos)
// RecyclerView 설정
recyclerViewMemos.layoutManager = LinearLayoutManager(this)
adapter = MemoAdapter(memoList)
recyclerViewMemos.adapter = adapter
// 저장된 메모 불러오기
loadMemos()
// 버튼 클릭 이벤트
buttonAddMemo.setOnClickListener {
val memoText = editTextMemo.text.toString()
if (memoText.isNotEmpty()) {
memoList.add(memoText) // 메모 리스트에 추가
adapter.notifyDataSetChanged() // 어댑터에 변경 사항 반영
editTextMemo.text.clear() // 입력 필드 초기화
saveMemos() // 메모 저장
}
}
}
//여기서 부터 gson을 활용한 코드
// 메모 저장 함수
private fun saveMemos() {
val sharedPreferences = getSharedPreferences("memo_prefs", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
val gson = Gson()
val json = gson.toJson(memoList)
editor.putString("memo_list", json)
editor.apply()
}
// 메모 불러오기 함수
private fun loadMemos() {
val sharedPreferences = getSharedPreferences("memo_prefs", Context.MODE_PRIVATE)
val gson = Gson()
val json = sharedPreferences.getString("memo_list", null)
if (json != null) {
val type = object : TypeToken<MutableList<String>>() {}.type
val loadedMemos: MutableList<String> = gson.fromJson(json, type)
memoList.addAll(loadedMemos)
adapter.notifyDataSetChanged()
}
}
}
1. 메모 저장 함수(saveMemos)
memoList를 JSON 문자열로 변환한 뒤, SharedPreferences를 사용하여 로컬에 저장합니다.코드 동작
val sharedPreferences = getSharedPreferences("memo_prefs", Context.MODE_PRIVATE)
"memo_prefs"라는 이름으로 SharedPreferences 파일을 생성 또는 가져옵니다.Context.MODE_PRIVATE는 해당 데이터를 . 앱내부에서만 접근 가능하게 설정합니다.val editor = sharePreferences.edit()
editor객체를 가져옵니다.val gson = Gson()
val json = gson,.toJson(memoList)
memoList(메모리스트)를 JSON문자열로 변환합니다. 예를 들어, 리스트가 ["Memo1", "Memo2"]가 됩니다.editor.putString("memo_list", json)
editor.apply()
"memo_list" 라는 키로 저장합니다.apply()를 호출하여 비동기적으로 저장 작업을 완료합니다.2. 메모 불러오기 함수(loadMemos)
SharedPreferences에 저장된 JSON 데이터를 가져와서 memoList로 역직렬화 합니다.
이후, RecyclerView를 업데이트 합니다.
코드 동작
1. SharedPreferences 가져오기
val sharedPreferences = getSharedPreferences("memo_prefs", Context.MODE_PRIVATE)
"memo_prefs"라는 이름의 SharedPreferences vkdlfdmf rkwudhqslek.val gson = Gson()
val json = sharedPreferences.getString("memo_list", null)
null을 반환합니다.4.JSON 데이터를 리스트로 역직렬화
val type = object : TypeToken<MutableList<String>>() {}.type
val loadedMemos: MutableList<String> = gson.fromJson(json, type)
TypeToken을 사용하여 JSON 문자열을 MutableList<String>타입으로 변환합니다.["Memo1", "Memo2"]라면 리스트로 변환된 결과는["Memo1", "Memo2"]가 됩니다.memoList.addAll(loadedMemos)
adapter.notifyDataSetChanged()
memoList에 추가합니다.adapter.notifyDataSetChanged()를 호출하여 RecyclerView를 업데이트 합니다.다음 포스트 에서는 필자의 핸드폰으로 앱을 작동하는 포스트를 쓰겠습니다.