android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/EditText"
android:hint="글자를 입력하세요!"
android:layout_width="fill_parent">
android:text="체크박스1"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
android:layout_height="wrap_content"
android:text="체크박스2"
android:layout_width="fill_parent">
코드 : prefExample.java
01.
package
com.androidhuman.Preferences;
02.
03.
import
android.app.Activity;
04.
import
android.content.SharedPreferences;
05.
import
android.os.Bundle;
06.
import
android.widget.CheckBox;
07.
import
android.widget.EditText;
08.
09.
public
class
prefExample
extends
Activity {
10.
/** Called when the activity is first created. */
11.
@Override
12.
public
void
onCreate(Bundle savedInstanceState) {
13.
super
.onCreate(savedInstanceState);
14.
setContentView(R.layout.main);
15.
16.
SharedPreferences pref = getSharedPreferences(
"pref"
, Activity.MODE_PRIVATE);
// Shared Preference를 불러옵니다.
17.
EditText edit1 = (EditText)findViewById(R.id.EditText);
18.
CheckBox check1 = (CheckBox)findViewById(R.id.CheckBox01);
19.
CheckBox check2 = (CheckBox)findViewById(R.id.CheckBox02);
20.
21.
// 저장된 값들을 불러옵니다.
22.
String text = pref.getString(
"editText"
,
""
);
23.
Boolean chk1 = pref.getBoolean(
"check1"
,
false
);
24.
Boolean chk2 = pref.getBoolean(
"check2"
,
false
);
25.
26.
edit1.setText(text);
27.
check1.setChecked(chk1);
28.
check2.setChecked(chk2);
29.
}
30.
31.
public
void
onStop(){
// 어플리케이션이 화면에서 사라질때
32.
super
.onStop();
33.
SharedPreferences pref = getSharedPreferences(
"pref"
, Activity.MODE_PRIVATE);
// UI 상태를 저장합니다.
34.
SharedPreferences.Editor editor = pref.edit();
// Editor를 불러옵니다.
35.
36.
EditText edit1 = (EditText)findViewById(R.id.EditText);
37.
CheckBox check1 = (CheckBox)findViewById(R.id.CheckBox01);
38.
CheckBox check2 = (CheckBox)findViewById(R.id.CheckBox02);
39.
40.
// 저장할 값들을 입력합니다.
41.
editor.putString(
"editText"
, edit1.getText().toString());
42.
editor.putBoolean(
"check1"
, check1.isChecked());
43.
editor.putBoolean(
"check2"
, check2.isChecked());
44.
45.
editor.commit();
// 저장합니다.
46.
}
47.
}
이 어플리케이션의 목적, SharedPreferences을 사용하는 목적은 "액티비티를 종료시켜도 사용자는 모르게" 하는 것입니다.
액티비티 라이프사이클에 따라서, 액티비티가 종료될 때 당시 UI상태를 기억하고 있다가 사용자가 다시 그 액티비티 (어플리케이션)을 실행시킬 때 저장된 상태를 그대~로 불러와서, 마치 사용자는 "아무 일도 일어나지 않은 것처럼" 계속 작업을 할 수 있죠.
일단, Shared Preferences가 어떻게 생긴 놈인지부터 알아보겠습니다.
Shared Preferences는 예전 Intent에 정보를 넣어서 보낼 때 처럼 키(key)와 값(Value) 한 쌍으로 이루어져 있습니다.
자, 그럼 이제부터 Shared Preferences를 이용하여 데이터를 저장하는 과정에 대해 알아봅시다.
1. Shared Preferences 객체 생성하기
Intent 객체를 만들고, 그 안에 필요한 데이터를 넣어 보냈던 것 처럼 Shared Preferences 또한 객체를 생성해 주어야 합니다.
1.
// "pref"라는 가진 Shared Preferences 객체를 생성합니다.
2.
SharedPreferences pref = getSharedPreferences(
"Pref"
, Activity.MODE_PRIVATE);
2. Shared Preferences를 수정할 수 있는 에디터 생성 및 편집
SharedPreferences 겍체를 수정하려면, Editor 객체를 받아와야 합니다.
1.
SharedPreferences.Editor editor = pref.edit();
// 에디터를 받아옵니다.
01.
EditText edit1 = (EditText)findViewById(R.id.EditText);
02.
CheckBox check1 = (CheckBox)findViewById(R.id.CheckBox01);
03.
CheckBox check2 = (CheckBox)findViewById(R.id.CheckBox02);
04.
05.
editor.putString(
"editText"
, edit1.getText().toString());
// 데이터를 입력합니다.
06.
editor.putBoolean(
"check1"
, check1.isChecked());
07.
editor.putBoolean(
"check2"
, check2.isChecked());
08.
09.
editor.commit();
// 편집을 종료하고 저장합니다.
사용 가능한 메소드로는 putString, putInt, putLong, putFloat, putBoolean이 있습니다. 이 형식에 맞추어 입력한 후, commit()메소드를 이용하여 데이터 편집을 마치고 저장합니다.
이 과정은 액티비티가 종료되는 과정, 즉 onStop()에서 일어나기에 onCreate()메소드를 오버라이드 하는 것처럼 onStop()메소드를 오버라이딩해야 합니다. onStop()메소드를 오버로딩하면 다음과 같이 됩니다.
01.
public
void
onStop(){
02.
super
.onStop();
03.
SharedPreferences pref = getSharedPreferences(
"pref"
, Activity.MODE_PRIVATE);
04.
SharedPreferences.Editor editor = pref.edit();
05.
06.
07.
EditText edit1 = (EditText)findViewById(R.id.EditText);
08.
CheckBox check1 = (CheckBox)findViewById(R.id.CheckBox01);
09.
CheckBox check2 = (CheckBox)findViewById(R.id.CheckBox02);
10.
11.
editor.putString(
"editText"
, edit1.getText().toString());
12.
editor.putBoolean(
"check1"
, check1.isChecked());
13.
editor.putBoolean(
"check2"
, check2.isChecked());
14.
15.
editor.commit();
16.
}
저장하는 것은 배웠으니, 이제 불러오는 것을 배워야겠죠?
불러오는 것은 그리 어렵지 않습니다. 아까 저장한 SharedPreferences 객체로부터 저장된 UI정보를 불러오기만 하면 됩니다.
01.
public
void
onCreate(Bundle savedInstanceState) {
02.
super
.onCreate(savedInstanceState);
03.
setContentView(R.layout.main);
04.
05.
SharedPreferences pref = getSharedPreferences(
"pref"
, Activity.MODE_PRIVATE);
06.
EditText edit1 = (EditText)findViewById(R.id.EditText);
07.
CheckBox check1 = (CheckBox)findViewById(R.id.CheckBox01);
08.
CheckBox check2 = (CheckBox)findViewById(R.id.CheckBox02);
09.
10.
edit1.setText(pref.getString(
"editText"
,
""
));
11.
check1.setChecked(pref.getBoolean(
"check1"
,
false
));
12.
check2.setChecked(pref.getBoolean(
"check2"
,
false
));
13.
}
아까 데이터를 저장할 때는 putExtra()를 썼던 것과 달리 데이터를 받아올 떄에는 get
get
*추가내용 : 2009/05/26
SharedPreference는 어떤 식으로 저장될까요? 파일? 데이터베이스?
정답은 파일입니다. DDMS를 통해 data/data/패키지이름/shared_prefs 폴더에 위에서 지정한 Preferences의 이름으로 저장됩니다.