안드로이드 개발 자료 관리를 위한 SharedPreferences 사용하는 방법

 

환경: Android Studio 3.0.0

 

안드로이드 앱에서 스마트폰에 값을 저장하고 싶을 때 DB 만 있는 것은 아닙니다. SQLite 에 값을 저장하기 위해서는 쿼리를 짜야 하고 테이블을 만들어야 합니다. 작업이 복잡합니다. 그래서 간단한 값 저장에는 SharedPreferences 를 사용하는 것이 좋습니다. 보통 초기 설정값이나 자동 로그인에 많이 사용하고 있습니다. SharedPreferences 에 저장한 데이터는 앱 전체에서 공유가 가능합니다.

안드로이드 개발 자료 관리를 위한 SharedPreferences 사용하는 방법

 

먼저 SharedPreferences 인스턴스를 얻어야 합니다. 함수는 세 가지 입니다.

 

l  getPreferences(int mode) : 하나의 Activity 에만 사용할 수 있습니다. 파일은 해당 Activity 이름으로 생성됩니다.

l  getSharedPreferences(String name, int mode) : 첫 번째 파라미터의 이름을 가진 SharedPreferences 를 생성합니다. 앱 전체에서 저장하고나 불러올 수 있습니다.

l  PerferenceManager.getDefaultSharedPreferences(Context context) : 환경 설정 액티비티에서 저장한 SharedPreferences의 데이터에 접근할 때 사용합니다.

l  mode : MODE_PRIVATE(읽기/쓰기 가능), MODE_WORLD_READABLE(읽기 가능), MODE_WORLD_WRITEABLE(쓰기 가능)

 

데이터를 저장하는 과정은 다음과 같습니다. SharedPreferences 인스턴스에서 저장을 위한 SharedPreferences.Editor 가져와야 합니다

SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("data", edtData.getText().toString());
editor.commit(); //완료한다.

저장할 수 있는 데이터 타입과 함수는 다음과 같습니다. 배열은 putStringSet() 함수를 이용하면 되겠죠.

 

putBoolean(String key, boolean value)

putFloat(String key, float value)

putInt(String key, int value)

putLong(String key, long value)

putString(String key, String value)

putStringSet(String key, Set<String> values)

 

다음은 데이터를 불러오는 과정입니다. 저장한 데이터 타입에 맞게 함수를 호출해야 합니다. putInt() 로 저장했다면 getInt() 로 호출해야겠죠.

SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
String data = sp.getString("data", "");

TextView tvData = (TextView)findViewById(R.id.tv_data);
tvData.setText(data);

데이터를 삭제하는 방법은 두 가지 입니다. clear() 함수를 이용해서 전체를 삭제하거나 remove() 로 특정 key 값에 해당하는 데이터만 삭제할 수 있습니다.

SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove("data");
editor.commit();

SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.commit();

화면을 구현한 전체 Activity 소스 입니다.

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class SharedPreferencesActivity extends AppCompatActivity {

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

    protected void onSaveData(View v){
        EditText edtData = (EditText)findViewById(R.id.edt_data);

        SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("data", edtData.getText().toString());
        editor.commit(); //완료한다.

    }

    protected void onSearchData(View v){
        SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
        String data = sp.getString("data", "");

        TextView tvData = (TextView)findViewById(R.id.tv_data);
        tvData.setText(data);
    }

    protected void onDeleteData(View v){
        SharedPreferences sp = getSharedPreferences("shared", MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        editor.commit();
    }
}

Activity 에 사용한 화면 레이아웃 입니다. 파일명은 activity_shared_preferences.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"
    tools:context="display.samsung.workplace.SharedPreferencesActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#84acd1"
        android:layout_margin="5dp"
        android:padding="5dp"
        android:textColor="#FFFFFF"
        android:text="저장할 자료"/>

    <EditText
        android:id="@+id/edt_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/btn_save"
        android:text="자료 저장"
        android:onClick="onSaveData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#84acd1"
        android:layout_margin="5dp"
        android:padding="5dp"
        android:textColor="#FFFFFF"
        android:text="불러온 자료"/>

    <TextView
        android:id="@+id/tv_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:padding="5dp"/>

    <Button
        android:id="@+id/btn_search"
        android:text="자료 불러오기"
        android:onClick="onSearchData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>
Posted by 녹두장군