데이터를 영구적인 저장 하는 방법 총 3가지
- SharedPreferences
- DB로 저장하는 방법
- 파일 형태로 저장하는 방법
Preferences : 프로그램의 설정 정보를 영구적으로 저장하는 용도로 사용
XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장(ex : 알람 true, 알람 false)
Preferences 종류는 크게 두 가지
- getSharedPreferences(여러가지 데이터를 한꺼번에 저장)
- getSharedPreferences(name, mode)
- name : 프레퍼런스 데이터를 저장할 XML 파일의 이름
- mode : 파일의 공유 모드
- MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
- getPreferences(딱 한 개의 Preferences를 사용할 때)
MainActivity
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.android.androidtest.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
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
}
binding.btnSave.setOnClickListener {
//버튼 클릭 시 pref 이름을 가진 xml을 생성, 거기에 editText의 text 내용을 넘김
saveData()
Toast.makeText(this,"Data Saved",Toast.LENGTH_SHORT).show()
}
//pref 이름을 가진 xml에서 값을 가져와 editText의 text를 내용을 다시 가져온다
loadData()
}
private fun saveData(){
//pref는 name은 pref, mode 0(=MODE_PRIVATE)으로 초기화
val pref = getSharedPreferences("pref",0)
val edit = pref.edit()
//값을 editText의 text로 적용(키는 name)
edit.putString("name", binding.etHello.text.toString())
edit.apply()
}
private fun loadData(){
val pref = getSharedPreferences("pref",0)
//키가 name이라면 해당 키에 있는 값을 editText의 text에 넣음
binding.etHello.setText(pref.getString("name",""))
}
}
activity_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">
<EditText
android:id="@+id/et_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textColor="#000000"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="저장하기"
app:layout_constraintTop_toBottomOf="@id/et_hello"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
'Android 앱개발 공부 > TIL(Today I Learned)' 카테고리의 다른 글
[Android] TIL 44일차 (0) | 2024.08.02 |
---|---|
[Android] TIL 42일차 (0) | 2024.07.31 |
[Android] TIL 41일차 (1) | 2024.07.23 |
[Android] TIL 40일차 (3) | 2024.07.22 |
[Android] TIL 38일차 (1) | 2024.07.18 |