본문 바로가기
Android/기본기능

[Android] SharedPreferences를 이용해서 임시 데이터 저장하기

by 백호루이 2023. 10. 2.
반응형

앱을 작성하다보면 굳이 DB까지 사용할 정도로 데이터 양이 많지는 않지만 앱이 종료 되어도 값이 저장이 될 경우가 필요한 시나리오가 있다. (예를 들면, switch를 이용한 값을 변경했을 때 다시 앱을 실행해도 그 값이 그대로 적용이 되어야 하는 경우)

 

EditCtrl을 하나 만들어서 거기에 입력된 값이 앱이 종료 후 재실행 되어도 그대로 저장이 되어 있도록 구현해 보자. UI 상으로는 입력된 값이 EditCtrl에 그대로 남아 있는 것처럼 보이지만 사실은 앱이 종료될 때 SharedPreferences에 저장을 했다가 재실행 될때 그 값을 읽어서 다시 EditCtrl에 뿌려주는 것이다.

 

1. activity_main.xml에 EditCtrl 생성

<?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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_save"
        android:layout_width="100dp"
        android:layout_height="wrap_content" />

</LinearLayout>

 

 

2. MainActivity 설정

package com.example.sharedexample;

import androidx.appcompat.app.AppCompatActivity;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText et_save;
    String shared = "file";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_save = (EditText) findViewById(R.id.et_save); // xml 연결

        // SharedPreferences 선언
        SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);

        String value = sharedPreferences.getString("key", ""); // "key"에 해당하는 값을 읽어옴
        et_save.setText(value); // 읽어온 값을 EditCtrl에 set 함
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        // SharedPreferences 선언
        SharedPreferences sharedPreferences = getSharedPreferences(shared, 0);
        // EditCtrl에 적힌 값을 읽어서 저장하기
        SharedPreferences.Editor editor = sharedPreferences.edit(); //edit mode로 전환
        String value = et_save.getText().toString(); //editctrl에 입력된 값을 문자열로 가져옴
        editor.putString("key", value); //가져온 문자열을 key라는 별명으로 editor에 저장함
        editor.commit(); // editor에 값을 save하는 과정
    }
}

앱이 종료될 때 onDestory()를 콜백하면 SharedPreferences를 만들어서 EditCtrl의 값을 옮겨 놓은 후, 앱이 재실행 될때 onCreate()에서 다시 SharedPreferences를 만들어서 값은 키값으로 저장된 값을 불러와서 EditCtrl에 set 해주는 것이다.

 

<결과>

앱 종료 후 재실행 했을 때 입력값이 그대로 남아있다.

반응형

댓글