이 튜토리얼에서는 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:
Source:
https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial