SharedPreferences ?
- 간단한 값을 저장할 때 주로 사용된다. 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장할 때 DB를 사용하면 복잡하기에 SharedPreferences 사용이 적절하다.
- Key - Value 형태로 저장한다.
- 애플리케이션을 파일 형태로 데이터를 저장한다.
사용
1. layout
main과 작성할 add Activity를 만들어준다.
addActivity의 EditText에서 받아온 text를 mainActivity의 TextView에 띄울 것이다.
추가적으로 앱을 종료했을 때도 저장되도록 하려한다.
activity_main | activity_add |
코드 ↓
더보기
Main.xml
<?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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/valueTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/goAddButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="작성하러가기"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/valueTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
Add.xml
<?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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AddActivity">
<EditText
android:id="@+id/addEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginEnd="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/backButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:hint="이름을 작성해주세요."
android:text="저장"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/addEditText" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 코드 작성
const.kt 생성
const val INFORMATION = "textInformation"
const val NAME = "name"
데이터 받을 곳 생성
AddActivity.kt
private fun saveData() {
with(getSharedPreferences(INFORMATION, MODE_PRIVATE).edit()) {
putString(NAME, binding.addEditText.text.toString())
apply()
}
Toast.makeText(this, "저장완료", Toast.LENGTH_SHORT).show()
}
binding으로 EditText에서 작성된 내용을 저장하는 것이다.
private fun goBack() {
binding.backButton.setOnClickListener {
saveData()
finish()
}
}
위에 메서드를 불러주고 finish로 종료
전체코드 ↓
더보기
import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.kotlin_sharedpreference_practice.databinding.ActivityAddBinding
class AddActivity : AppCompatActivity() {
private lateinit var binding: ActivityAddBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityAddBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
goBack()
}
private fun goBack() {
binding.backButton.setOnClickListener {
saveData()
finish()
}
}
private fun saveData() {
with(getSharedPreferences(INFORMATION, MODE_PRIVATE).edit()) {
putString(NAME, binding.addEditText.text.toString())
apply()
}
Toast.makeText(this, "저장완료", Toast.LENGTH_SHORT).show()
}
}
MainActivity.kt
private fun getDataUiUpdate(){
with(getSharedPreferences(INFORMATION, Context.MODE_PRIVATE)){
binding.valueTextView.text = getString(NAME,"이름 ?")
}
}
private fun goAdd() {
binding.goAddButton.setOnClickListener {
val intent = Intent(this, AddActivity::class.java)
startActivity(intent)
}
}
override fun onResume() {
super.onResume()
getDataUiUpdate()
}
전체코드 ↓
더보기
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.kotlin_sharedpreference_practice.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityMainBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
goAdd()
}
private fun goAdd() {
binding.goAddButton.setOnClickListener {
val intent = Intent(this, AddActivity::class.java)
startActivity(intent)
}
}
override fun onResume() {
super.onResume()
getDataUiUpdate()
}
private fun getDataUiUpdate(){
with(getSharedPreferences(INFORMATION, Context.MODE_PRIVATE)){
binding.valueTextView.text = getString(NAME,"이름 ?")
}
}
}
따로 앱이 종료되더라도 저장된 모습을 안보여줬지만 저장도 잘 된다.
완성 !
추가적으로 지우는 것까지 구현하자면
1. 버튼 생성
<Button
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="지우기"
app:layout_constraintStart_toEndOf="@id/goAddButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/goAddButton"/>
2. MainActivity.kt
private fun deleteData() {
binding.deleteButton.setOnClickListener {
with(getSharedPreferences(INFORMATION, MODE_PRIVATE).edit()) {
clear()
apply()
getDataUiUpdate()
}
Toast.makeText(this, "삭제 완료", Toast.LENGTH_SHORT).show()
}
}
onCreate()안에 deleteData()를 넣어주면 끝
'Android Studio' 카테고리의 다른 글
Android - 2주차 과제 (0) | 2024.04.01 |
---|---|
Android - TabLayout 사용해서 Fragment 전환 (0) | 2024.03.26 |
Android - Firebase Storage에 사진 올리기 (1/2) (1) | 2024.03.15 |
Android - FireStore 규칙 설정 / 데이터 가져오기 (1) | 2024.03.12 |
Kotlin - Firebase Auth로 간단한 로그인 구현 (1) | 2024.03.08 |