Android 앱개발 공부/TIL(Today I Learned)

[Android] TIL 43일차

bunny code 2024. 7. 31. 22:50

데이터를 영구적인 저장 하는 방법 총 3가지

  1. SharedPreferences
  2. DB로 저장하는 방법
  3. 파일 형태로 저장하는 방법

Preferences : 프로그램의 설정 정보를 영구적으로 저장하는 용도로 사용

XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장(ex : 알람 true, 알람 false)

Preferences 종류는 크게 두 가지

  1. getSharedPreferences(여러가지 데이터를 한꺼번에 저장)
    • getSharedPreferences(name, mode)
    • name : 프레퍼런스 데이터를 저장할 XML 파일의 이름
    • mode : 파일의 공유 모드
      • MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
  2. 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