오늘은 위와 같은 어플을 만들 것이다.

그냥 봐서는 어플의 기능을 추측할수 없는데 이것은 껏다가 켜도 화면의 내용이 초기화 되지 않고 유지되는 기능을 가지고 있다.

 

그럼 만들기를 시작해 보도록 하자.

먼저 위와 같은 형태의 레이아웃 을 작성하자.

 

- main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<EditText
    android:layout_height="wrap_content"
    android:id="@+id/nameEditText"
    android:layout_width="fill_parent"
    android:hint="name"></EditText>
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:hint="email"
        android:id="@+id/emailEditText"></EditText>
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:hint="phone"
        android:id="@+id/phoneEditText"></EditText>

</LinearLayout>

 

다음은  Activity 파일을 작성하자

 

- MainActivity.java

package net.cranix.android.preftest;

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

public class MainActivity extends Activity {
    private SharedPreferences pref = null;
    private EditText nameEditText = null;
    private EditText emailEditText = null;
    private EditText phoneEditText = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pref = getSharedPreferences("net.cranix.android.preftest",Activity.MODE_PRIVATE);
        nameEditText = (EditText) findViewById(R.id.nameEditText);
        emailEditText = (EditText) findViewById(R.id.emailEditText);
        phoneEditText = (EditText) findViewById(R.id.phoneEditText);
        nameEditText.setText(pref.getString("name", ""));
        emailEditText.setText(pref.getString("email", ""));
        phoneEditText.setText(pref.getString("phone", ""));

    }
    @Override
    protected void onStop() {
        super.onStop();
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("name", nameEditText.getText().toString());
        editor.putString("email", emailEditText.getText().toString());
        editor.putString("phone", phoneEditText.getText().toString());
        editor.commit();

    }
}

이렇게 현재 화면 정보 같은 작은 정보들을 저장하기 위해서 안드로이드는 SharedPreferences 라는 클래스를 제공한다.

이 클래스는 위 소스 에서와 같이 getSharedPreferences 메소드로 객체를 생성 할 수 있다.

이렇게 생성된 SharedPreferences 객체는 getString 과 같은 getXXX 형태의 메소드로 값을 얻어 올 수 있다.

위 소스에서 Activity 가 종료되는 onStop 메소드 에서는 SharedPreferences 에다가 현재 환경을 저장하고 있다.

SharedPreferneces 는 pref.edit() 로 Editor 객체를 얻은후 putString 으로 값을 변경한다. 다 변경했으면 editor.commit() 함수로 변경된 내용을 저장한다.

 

위에서도 언급했듯이 SharedPreferences 는 임시변수나 현재 UI 정보같은 작은 크기의 정보를 저장하기 적합하다. 조금 더 큰 데이터는 직접 파일에 쓰거나 SQL 을 사용하여 DB 에 저장하도록 하여야 한다.

 

그렇다면 이 데이터는 어디에 저장되는 것일까?

DDMS 나 adb 툴을 이용하여 확인해 보면 아래와 같은 xml 파일이 어플리케이션 디렉토리에 생긴 것을 볼 수 있다.

# pwd
pwd
/data/data/net.cranix.android.preftest
# cd shared_prefs
cd shared_prefs
# ls
ls
net.cranix.android.preftest.xml
# cat net.cranix.android.preftest.xml
cat net.cranix.android.preftest.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="email">2</string>
<string name="phone">3</string>
<string name="name">1</string>
</map>
#

'알짜정보 > Android' 카테고리의 다른 글

android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
Activity 간의 통신  (121) 2010.02.25
by cranix 2010. 3. 1. 03:31
| 1 |