KOTLIN

코틀린(Kotlin) 안드로이드 스튜디오 SharedPerferences 사용하기

사과씨앗 2021. 1. 23. 19:42
728x90
반응형

안녕하세요 이번 글에서는 코틀린을 이용해 SharedPerferences를 사용해 보겠습니다.

 

SharedPerferences는 애플리케이션의 간단한 데이터들을 외부 저장소가 아닌 내부 저장소에 저장을 할 때 사용합니다. 

내부 저장소를 사용하는 것이다 보니 권한 설정이 필요 없고 간단한 코드로 구현이 가능합니다.

 

먼저 화면부터 구성하겠습니다.

 

 

<?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">

    

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="전송"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/et"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml 

 

Editext와 Button을 하나씩 만들어 줍시다.

 

<?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=".SubActivity">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="이름"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/tv_age"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="나이"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tv_name"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

sub_activity.xml

 

main에서 보내준 값을 담을 TextView를 만들어 줍니다.

 

package com.example.sharedpreferences_kt

import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

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


        button.setOnClickListener {
            //EditText 에 작성한 값을 가지고 옵니다.
            val name = et.text.toString()
            //SharedPreferences 를 지정하여 주고 두번째 인자로 접근원한을 설정하여 줍니다. (다른접근 권한도 있지만 요즘은 MODE_PRIVATE 만 사용합니다)
            val shared = getSharedPreferences("file", Context.MODE_PRIVATE)
            //데이터를 저장하기 위해서 eidt() 함수를 호출하여 줍니다
            val editor = shared.edit()
            //데이터를 키 벨류 형식으로 저장
            editor.putString("name",name)
            //prefix 를 put 으로 지정하고 타입별로 지정하여 줍시다.
            editor.putInt("age", 29)
            //마지막에 apply 를 사용하여 실제로 반영을 합니다.
            editor.apply()
            //다음화면으로 이동시켜준다.
            val intent:Intent = Intent(this,SubActivity::class.java)
            startActivity(intent)
        }

    }
}

MainActivity클래스에 위와 같이 코딩하여 줍시다.

 

package com.example.sharedpreferences_kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_sub.*

class SubActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)

        val shared = getSharedPreferences("file", MODE_PRIVATE)

        //MainActivity 에서 보내온 값을 셋팅하여 줍시다 첫번째 인자로 키값을 지정하여 주고 두번째 인자로 default 값을 지정하여 줍니다.
        tv_age.text = shared.getString("name","익명").toString()
        tv_name.text = shared.getInt("age",0).toString()
    }
}

마지막으로 SubActivity에서 값을 받아 줍니다.

 

 

 

 

다음과 같은 결과를 확인할 수 있습니다.

 

감사합니다~

728x90
반응형