개발을 진행하다 보면, 앱의 데이터들을 저장하여 관리해야 할 상황에 직면하게 된다.
데이터의 양이 많거나 중요한 데이터라면 서버나 DB, 파일의 형태로 저장을 하면 되겠지만,
간단한 설정 값이나 문자열 같은 데이터들은 DB에 저장하기에는 부담스럽고 애매한 경우가 있다.
이때 안드로이드에서 기본적으로 제공되는 SharedPreferences를 사용하여 데이터를 관리한다면 좀 더 편리하게 사용이 가능하다.
앱 실행시 보이는 첫 화면 (MainActivity)
EditText에 원하는 문자를 입력한다 (예시의경우 save 입력)
EditText에 문자를 입력했다면 저장하기 버튼을 누른다.
불러오기 버튼을 누르면 보이는 화면 (MainActivity)
불러오기 버튼을 누르면 저장된 값이 TextView에 나타난다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
app:layout_constraintBottom_toTopOf="@id/editText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="write"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/saveBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="저장하기"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/showBtn"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/editText" />
<Button
android:id="@+id/showBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="불러오기"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/saveBtn"
app:layout_constraintStart_toEndOf="@id/saveBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 1. SharedPreference 생성하기
val sp = getSharedPreferences("firstSP", Context.MODE_PRIVATE)
// 2. Editor 꺼내기
val editor = sp.edit()
val textView = findViewById<TextView>(R.id.textView)
val editText = findViewById<EditText>(R.id.editText)
val saveBtn = findViewById<Button>(R.id.saveBtn)
saveBtn.setOnClickListener {
// 3. putString() 메서드로 저장하기
editor.putString("name", editText.text.toString())
// 4. apply()로 파일에 반영하기
editor.apply()
}
val showBtn = findViewById<Button>(R.id.showBtn)
showBtn.setOnClickListener {
// 5. getString() 메서드로 값 읽어오기
textView.text = sp.getString("name", null)
}
}
}