Tools/Android Studio

[ Android Studio ] 간편 데이터 저장 SharedPreferences 사용 방법

리신 2021. 10. 26. 02:11
반응형

SharedPreferences

https://developer.android.com/training/data-storage/shared-preferences?hl=ko 

 

키-값 데이터 저장  |  Android 개발자  |  Android Developers

키-값 데이터 저장 저장하려는 키-값 컬렉션이 비교적 작은 경우 SharedPreferences API를 사용해야 합니다. SharedPreferences 객체는 키-값 쌍이 포함된 파일을 가리키며 키-값 쌍을 읽고 쓸 수 있는 간단

developer.android.com

위 링크를 타고 들어가서 한번 보면 SharedPreferences API를 어떻게 사용하는지 알 수 있다.

하지만.. 필자는 저걸 보고 뭐지.. 무슨말이지 했었다.

나와 같은 사람이 있을것 같아 삽질과 구글링으로 이해하고 정리한 글을 올려본다 

 

 

 


 

SharedPreferences이란? 


간단한 데이터를 저장하고 불러올 수 있다.

앱을 꺼도 데이터가 유지된다는 점에서 간편한 데이터베이스 역할을 할 수 있다.

DB를 사용하기 부담스러운 경우, 안드로이드에서 기본적으로 제공하는 SharedPreferences를 사용할 수 있다.

 

 

 

SharedPreferences의 특징


  • 보통 초기 설정값이나 자동 로그인 여부 등 간단한 값을 저장하기 위해 사용
  • Application에 파일 형태로 데이터를 저장함
  • Application이 삭제되기 전까지 저장한 데이터가 보존됨
  • Key-value 방식
MODE 종류

- MODE_PRIVATE : 생성한 Application에서만 사용 가능하다.
- MODE_WORLD_READABLE : 외부 App에서 사용 가능, But 읽기만 가능
- MODE_WORLD_WRITEABLE : 외부 App에서 사용 가능, 읽기/쓰기 가능

 

SharedPreferences 사용 방법 [코틀린(Kotlin) 코드]


변수선언

lateinit var pref: SharedPreferences
lateinit var editor: SharedPreferences.Editor

초기화

pref = getPreferences(Context.MODE_PRIVATE)
editor = pref.edit()

원하는 값 저장하기

editor.putString("InputData","save Data")
editor.apply()

위 코드는 "InputData" key에 "save Data"라는 값을 저장한다고 가정했을 때의 코드이다.

무조건 editor.apply() 해줘야 저장이 된다..

필자는 저걸 안 해줘서 삽질을 했다.. 😭

 

💎예제 코드💎

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  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"
    android:orientation="vertical"
    android:background="@color/white"
    android:gravity="center"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit"
        android:hint="원하는 값 입력"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn1"
        android:text="저장"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


</LinearLayout >

 

[MainActivity]

class MainActivity : AppCompatActivity() {

    lateinit var pref: SharedPreferences
    lateinit var editor: SharedPreferences.Editor

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

        // 1. Shared Preference 초기화
        pref = getPreferences(Context.MODE_PRIVATE)
        editor = pref.edit()

        // 2. 레이아웃 변수 초기화
        var edit : EditText = findViewById(R.id.edit)
        var btn1 : Button = findViewById(R.id.btn1)

        // 3. 저장해둔 값 불러오기 -> 저장된 값이 없으면 "" 로 들고옴
        var inputData = pref.getString("InputData","")

        // 4. 앱을 새로 켜면 이전에 저장해둔 값이 표시됨
        edit.setText(inputData.toString())

        // 5. 각 버튼 클릭시 새로운 값 저장
        btn1.setOnClickListener(View.OnClickListener {
            // (key : InputData, value : EditText에 입력한 데이터)
            editor.putString("InputData",edit.text.toString())
            editor.apply();
        })

    }
}

 

 

 

반응형