Developer Geek

Android DB - SharedPreferences 예제(Kotlin) 본문

안드로이드

Android DB - SharedPreferences 예제(Kotlin)

devGeek 2021. 11. 10. 00:37
반응형

개요

Android App 개발 중 가벼운 DB가 필요한 경우 SharedPreferences 를 사용하기를 추천한다.

Android Developers 공식 문서에서 SharedPreferences 를 설명하기를...

SharedPreferences >> 저장하려는 키-값(key-value) 컬렉션이 비교적 작은 경우 SharedPreferences API 를 사용해야 합니다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단한 메서드를 제공합니다. 각 SharedPreferences 파일은 프레임워크에서 관리하며 비공개이거나 공유일 수 있습니다.

예제로 SharedPreferences 를 이용하여 가상의 사용자의 정보를 저장하여 읽고 쓰기를 하도록 한다.

실행화면

Code - Example

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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:text="Name: "
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@id/etName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/etName" />

    <EditText
        android:id="@+id/etName"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="20dp"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/tvName"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias=".3" />

    <TextView
        android:id="@+id/tvMajor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:text="Major: "
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="@id/etMajor"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/etMajor" />

    <EditText
        android:id="@+id/etMajor"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="20dp"
        android:inputType="text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/tvMajor"
        app:layout_constraintTop_toBottomOf="@id/etName" />


    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btnSave"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="#3F51B5"
        android:text="저장하기"
        android:textColor="@color/white"
        android:textSize="20sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="@id/etMajor"
        app:layout_constraintStart_toStartOf="@id/etMajor"
        app:layout_constraintTop_toBottomOf="@id/etMajor" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.EditText
import androidx.appcompat.widget.AppCompatButton
import androidx.core.content.edit

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // "user" 이름을 갖는 SharedPreferences 생성(가져오기)
        val sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE)
        // user-sharedPreferences 에서 "name" 키로 저장된 값을 name 변수에 저장(단, 저장된 값이 없다면 "DefaultName"을 반환)
        var name = sharedPreferences.getString("name", "DefaultName")
        // user-sharedPreferences 에서 "major" 키로 저장된 값을 name 변수에 저장(단, 저장된 값이 없다면 "DefaultMajor"을 반환)
        var major = sharedPreferences.getString("major", "DefaultMajor")

        val etName: EditText = findViewById(R.id.etName)
        etName.setText(name)

        val etMajor: EditText = findViewById(R.id.etMajor)
        etMajor.setText(major)

        val btnSave: AppCompatButton = findViewById(R.id.btnSave)
        btnSave.setOnClickListener {
            var etNameText = etName.text.toString()
            var etMajorText = etMajor.text.toString()

            // 입력된 값으로 name, major 값 저장
            sharedPreferences.edit(){
                putString("name", etNameText)
                putString("major", etMajorText)
            }
        }
    }
}
반응형
Comments