안드로이드 공유 환경 설정 예제 튜토리얼

이 튜토리얼에서는 Shared Preferences를 사용하여 Android 애플리케이션에서 키-값 쌍의 형태로 데이터를 저장합니다.

Android Shared Preferences 개요

Shared Preferences를 사용하면 사용자가 응용 프로그램을 닫아도 지속되는 맵과 유사한 키-값 쌍 형식으로 활동 및 응용 프로그램이 기본 설정을 유지할 수 있습니다. Android는 Shared Preferences 설정을 shared_prefs 폴더에 XML 파일로 저장하며 해당 폴더는 DATA/data/{application package} 디렉토리 아래에 있습니다. DATA 폴더는 Environment.getDataDirectory()를 호출하여 얻을 수 있습니다. SharedPreferences은 응용 프로그램별로 특정하며 다음 옵션 중 하나를 수행할 때 데이터가 손실됩니다:

  • 애플리케이션을 삭제할 때
  • 애플리케이션 데이터를 지우면(설정을 통해)

이름에서 알 수 있듯이 주요 목적은 사용자 지정 구성 세부 정보를 저장하는 것입니다. 사용자 지정 설정 유지, 사용자가 응용 프로그램에 로그인된 상태 유지와 같은 세부 정보입니다. 환경 설정에 액세스하려면 세 가지 API 중 하나를 선택할 수 있습니다:

  • getPreferences(): Activity 내에서 사용되며, 활동별 환경 설정에 액세스하는 데 사용됩니다.
  • getSharedPreferences(): Activity 내부(또는 다른 응용 프로그램 콘텍스트)에서 사용되며 응용 프로그램 수준의 환경 설정에 액세스하는 데 사용됩니다.
  • getDefaultSharedPreferences() : PreferenceManager에서 사용되며 Android의 전체 환경 설정 프레임워크와 함께 작동하는 공유 환경 설정을 가져옵니다

이 튜토리얼에서는 getSharedPreferences()를 사용합니다. 이 방법은 다음과 같이 정의됩니다: getSharedPreferences(String PREFS_NAME, int mode) PREFS_NAME은 파일의 이름입니다. mode는 작동 모드입니다. 적용 가능한 작동 모드는 다음과 같습니다:

  • MODE_PRIVATE: 생성된 파일을 호출 애플리케이션만 액세스할 수 있는 기본 모드입니다
  • MODE_WORLD_READABLE: 전 세계에서 읽을 수 있는 파일을 생성하는 것은 매우 위험하며 응용 프로그램에서 보안 구멍을 일으킬 가능성이 높습니다
  • MODE_WORLD_WRITEABLE: 전 세계에서 쓸 수 있는 파일을 생성하는 것은 매우 위험하며 응용 프로그램에서 보안 구멍을 일으킬 가능성이 높습니다
  • MODE_MULTI_PROCESS: 이 메서드는 이미 로드된 공유 환경 설정 인스턴스에 대해서도 환경 설정의 수정을 확인합니다
  • MODE_APPEND: 새로운 환경 설정을 이미 존재하는 환경 설정에 추가합니다
  • MODE_ENABLE_WRITE_AHEAD_LOGGING: 데이터베이스 오픈 플래그입니다. 설정되면 기본적으로 전진 로깅 쓰기가 활성화됩니다

초기화

우리는 편집자가 공유된 환경 설정에서 편집하고 변경 사항을 저장하는 데 필요합니다. 다음 코드를 사용하여 공유 환경 설정에서 데이터를 얻을 수 있습니다.

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

데이터 저장

editor.commit()은 변경 사항을 공유 환경 설정에 저장하기 위해 사용됩니다.

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long
 
editor.commit(); // commit changes

데이터 검색

다음과 같이 getString()을 호출하여 저장된 환경 설정에서 데이터를 검색할 수 있습니다.

pref.getString("key_name", null); // getting String
pref.getInt("key_name", -1); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

데이터 지우기 또는 삭제하기

remove(“키_이름”)은 해당 값 삭제에 사용됩니다. clear()는 모든 데이터를 제거하는 데 사용됩니다.

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
 
editor.commit(); // commit changes
editor.clear();
editor.commit(); // commit changes

프로젝트 구조

Android Shared Preferences 프로젝트 코드

activity_main.xml 레이아웃에는 이름과 이메일을 저장하고 표시하는 두 개의 EditText 뷰가 있습니다. 세 개의 버튼은 각각 MainActivity에서 클릭 이벤트를 구현합니다.

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="Save"
        android:text="Save" />

    <Button
        android:id="@+id/btnRetr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="Get"
        android:text="Retrieve" />

    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/etEmail"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="clear"
        android:text="Clear" />

    <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Email"
        android:inputType="textEmailAddress"
        android:layout_below="@+id/etName"
        android:layout_marginTop="20dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Name"
        android:inputType="text"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/etEmail"
        android:layout_alignStart="@+id/etEmail" />

</RelativeLayout>

MainActivity.java 파일은 키를 통해 데이터를 저장하고 검색하는 데 사용됩니다.

package com.journaldev.sharedpreferences;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
    SharedPreferences sharedpreferences;
    TextView name;
    TextView email;
    public static final String mypreference = "mypref";
    public static final String Name = "nameKey";
    public static final String Email = "emailKey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);
        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));

        }

    }

    public void Save(View view) {
        String n = name.getText().toString();
        String e = email.getText().toString();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(Name, n);
        editor.putString(Email, e);
        editor.commit();
    }

    public void clear(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        name.setText("");
        email.setText("");

    }

    public void Get(View view) {
        name = (TextView) findViewById(R.id.etName);
        email = (TextView) findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference,
                Context.MODE_PRIVATE);

        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""));

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 메뉴를 팽창시킵니다. 작업 표시줄에 항목을 추가합니다(있는 경우).
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

}

mypreference는 공유 기본 설정 키-값 쌍이 저장된 파일의 이름입니다. 아래 이미지는 프로젝트의 최종 출력을 보여줍니다: 이로써 본 자습서는 종료됩니다. 프로젝트를 다음 링크에서 다운로드할 수 있습니다. Android Shared Preferences:

Android Shared Preferences 예제 프로젝트 다운로드

Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial